使用DataContext和INotifyPropertyChanged进行C#绑定

时间:2018-03-22 10:31:38

标签: c# data-binding datacontext inotifypropertychanged

我做错了什么?

我有一个具有DataContext

的Class Model.cs

我旁边有一个按钮和一个 TextBlock 。我尝试过绑定并实现INotifyPropertyChanged。

单击该按钮时,它会调用一个方法,该方法使用WinForms查找文件夹位置并将其显示在 TextBlock

但它没有更新。如果我调试我得到正确的路径。

任何帮助非常感谢。

MainWindow.xaml

if number > 1: 
    print_numbers(number-1) 
else:
    print(number) 

MainWindow.xaml.cs

cursor: url("banoscursorsmall.png"), url("banoscursorsmall.cur"), auto, zoom-in;

模型类

<Button  Name="projectLocationBtn" 
    Width="150" 
    Height="30" 
    Click="projectLocationBtn_Click">
    <StackPanel Orientation="Horizontal">
      <fa:FontAwesome Icon="FolderOpen" Margin="0 0 10 0" />
       <TextBlock Text="Select Location" />
   </StackPanel>                
</Button>

<StackPanel Orientation="Horizontal" Margin="20 0 0 0">
    <fa:FontAwesome Icon="AngleRight" Margin="0 0 10 0"/>
     <TextBlock Width="800" 
                 TextAlignment="Left" 
                  TextWrapping="NoWrap" 
                   Text="{Binding ProjectLocation}"/>
 </StackPanel>

非常感谢。

2 个答案:

答案 0 :(得分:1)

在GetLocation函数中,您需要设置ProjectLocation属性以引发PropertyChanged事件,如果直接设置_projectLocation私有字段,则不会引发事件,因为它位于属性的setter中

答案 1 :(得分:1)

  1. 错误是您有一个Model的forDataContext实例,并且您在projectLocationBtn_Click中调用了另一个实例。如果视图与dataContext有界,则意味着它是视图下的类的特殊实例,视图将从那里获取新数据。您需要在同一个Model实例上调用GetLocation方法。例如,您可以将第一个模型保存到字段中。

    _dataContext = new M.Model(); DataContext = _dataContext;

    然后在处理程序

    中使用此实例

    private void projectLocationBtn_Click(object sender, RoutedEventArgs e) { _dataContext.GetLocation(); }

  2. 我可以看到,毕竟它不起作用,因为你没有调用OnPropertyChanged(“ProjectLocation”)。 要调用它,您必须调用ProjectLocation属性的setter

    替换:
     _projectLocation = folderDialog.SelectedPath;
     ProjectLocation = folderDialog.SelectedPath;

  3. 并且对于您的信息:检查Button的单击如何绑定到DataContext,并在XAML文件中使用Binding工作。 https://www.codeproject.com/Articles/238657/How-to-use-Commands-in-WPF