我做错了什么?
我有一个具有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>
非常感谢。
答案 0 :(得分:1)
在GetLocation函数中,您需要设置ProjectLocation属性以引发PropertyChanged事件,如果直接设置_projectLocation私有字段,则不会引发事件,因为它位于属性的setter中
答案 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();
}
我可以看到,毕竟它不起作用,因为你没有调用OnPropertyChanged(“ProjectLocation”)。 要调用它,您必须调用ProjectLocation属性的setter
替换:
_projectLocation = folderDialog.SelectedPath;
与
ProjectLocation = folderDialog.SelectedPath;
并且对于您的信息:检查Button的单击如何绑定到DataContext,并在XAML文件中使用Binding工作。 https://www.codeproject.com/Articles/238657/How-to-use-Commands-in-WPF