2016-02-13 112 views
0

我是WPF的新手,我有文本框和打開文件夾瀏覽器對話框的按鈕。
當用戶選擇文件夾時我想將文本框中包含選定的路徑。 所以在主窗口我添加了兩個變量:將文本框的文本屬性綁定到MainWindow上定義的變量WPF

public partial class MainWindow : Window 
{ 
    public string outputFolderPath { get; set; } 
    string reducedModelFolderPath { get; set; } 
} 

,當用戶選擇的文件夾路徑(打開文件夾對話框之後)我做(例如)更新這些變量:

outputFolderPath = dialog.SelectedPath 

在MainWindow.xaml :

<TextBox x:Name="outputFolder" Width ="200" Height="30" Grid.Row="1" Grid.Column="1" Margin="5 10"> 

如何將TextBox.Text綁定到outputFolderPath變量?
感謝您的幫助!

回答

1

您需要將您的窗口的DataContext設置爲這個,才能在XAML中訪問您的屬性,然後綁定到屬性。由於您不綁定DependencyProperty,因此應該通知綁定該屬性已更改,這可以通過在Window中實現INotifyPropertyChanged接口來完成。 我提供了示例代碼來展示這個概念。
但是這非常醜陋,使用MVVM模式要好得多。

MainWindow.xaml.cs

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public string outputFolderPath { get; set; } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this;   
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     outputFolderPath = "Some data"; 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(outputFolderPath))); 
    } 
} 

MainWindow.xaml

<Window x:Class="simplest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:simplest" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 

     </Grid.RowDefinitions> 

     <Button Click="Button_Click" Content="Go" /> 
     <TextBox x:Name="outputFolder" Width ="200" Height="30" Grid.Row="1" Grid.Column="1" Margin="5 10" Text="{Binding outputFolderPath}"/> 
    </Grid> 
</Window> 
+0

非常感謝你! 你可以解釋一下關於「更好地使用MVVM模式」 – Programmer

+0

我可以使用相同的PropertyChangedEventHandler到多個變量嗎? – Programmer

+0

根據代表Model-View-ViewModel的MVVM,您的Window.xaml.cs中不應該有邏輯,所有操作都將在ViewModel中完成,這是獨立的類,實現INotifyPropertyChanged接口並分配給View的DataContext屬性(在我們的例子中是Window)。一篇解釋這個概念的文章:http://www.codeproject.com/Articles/100175/Model-View-ViewModel-MVVM-Explained –