【发布时间】:2016-09-27 04:37:57
【问题描述】:
我在 XAML 中有以下代码 sn-p。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="01*"/>
<ColumnDefinition Width="03*"/>
<ColumnDefinition Width="01*"/>
</Grid.ColumnDefinitions>
<Button Name="btnPrevious" Grid.Column="0" Content="Previous" Click="btnPrevious_Click"/>
<TextBlock Name="txtBlockName" Grid.Column="1" Text="{Binding SelectedName, UpdateSourceTrigger=PropertyChanged}" FontSize="30" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Button Name="btnNext" Grid.Column="2" Content="Next" Click="btnNext_Click"/>
</Grid>
这会生成如下输出,如图 1 所示。
这背后的代码如下所示。
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public List<string> namesList = new List<string>();
public string SelectedName
{
get
{
return namesList[1];
}
set
{
if (value != namesList[1])
{
namesList[1] = value;
NotifyPropertyChanged("SelectedName");
}
}
}
public MainWindow()
{
InitializeComponent();
namesList.Add("ABC");
namesList.Add("DEF");
namesList.Add("GHI");
this.DataContext = this;
}
private void btnPrevious_Click(object sender, RoutedEventArgs e)
{
string str = namesList[0];
namesList[0] = namesList[1];
namesList[1] = str;
this.IsEnabled = false;
}
private void btnNext_Click(object sender, RoutedEventArgs e)
{
string str = namesList[2];
namesList[2] = namesList[1];
namesList[1] = str;
this.IsEnabled = false;
}
protected void NotifyPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
TextBlock 的 Text 属性绑定到 SelectedName 属性。并且不会在更新 SelectedName 属性时进行更新。尽管我的类实现了INotifyPropertyChanged 接口并定义了它的NotifyPropertyChanged 行为,但它仍然不起作用。
在调试时,我设置了一些断点来观察SelectedName 属性值,我观察到它正在根据要求更新,但TextBlock 的Text 属性没有更新。如图2所示。
我在网上看到了很多问题和解决方案,但没有一个能解决我的问题。任何帮助将不胜感激。
【问题讨论】:
标签: c# wpf xaml binding properties