在C#中使用Model-View-ViewModel(MVVM)的WPF FolderBrowserDialog

时间:2019-01-04 06:21:08

标签: c# wpf mvvm

单击浏览按钮后,我必须获取FolderBrowserDialog,但是我应该使用MVVM来实现。

说明:

  1. 一旦出现FolderBrowserDialog框,我应该能够选择要保存文件的文件夹。

  2. 然后选择文件夹,它应该在我的浏览按钮旁边的文本框中显示所选的文件夹路径以及文件夹名称。

    我该如何实现呢?...

1 个答案:

答案 0 :(得分:0)

您需要学习绑定。

在这个简单的示例中,我添加了一个绑定到Command的按钮-替换了event背后的代码。我还使用了现存ICommand并实现它的Nuget(以及许多其他功能)-名称Nuget的是Prism6.MEF。

这里是示例:

Xaml:

    <Grid>
    <StackPanel>
        <TextBlock Text="{Binding BindableTextProperty}" />
        <Button Content ="Do Action" Command="{Binding DoAction}" Height="50"/>
    </StackPanel>

</Grid>

背后的代码:

    /// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MainWindowVM();
    }
}

查看模型:

   class MainWindowVM : BindableBase
{
    private string m_bindableTextProperty;


    public MainWindowVM() 
    {
        DoAction = new DelegateCommand(ExecuteDoAction,CanExecuteDoAction); 
    }


    public string BindableTextProperty
    {
        get { return m_bindableTextProperty; }
        set { SetProperty(ref m_bindableTextProperty , value); }
    }

    public DelegateCommand DoAction
    {
        get;
        private set;
    }

    private bool CanExecuteDoAction()
    {
        return true;
    }

    private void ExecuteDoAction() 
    { 
      // Do something
      // You could enter the Folder selection code here 
        BindableTextProperty = "Done"; 
    }
}

正如我在开始时解释的那样,要了解它为什么起作用,您必须了解WPF中的绑定,尤其是INotifyPropertyChange-用于TextBlock上的数据

希望对您有所帮助:)