我已成功将控件绑定到页面上的属性。我绑定的属性返回一个类。绑定有效但如果我将该属性设置为该类的新实例,则UI不会更新。
任何人都可以指出正确的方向来解决这个问题,我尝试过实施INotifyPropertyChanged,但这不起作用。
守则如下......
XAML - 非常基本只是尝试在一分钟时将标签绑定到属性。
<Grid>
<Label Content="{Binding StudentName}"></Label>
<Button Width="100" Height="75" Click="Button_Click" ></Button>
</Grid>
C#
this.DataContext = parentWindow.SelectedStudent;
父窗口C#note父窗口实现了INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
public UCStudent SelectedStudent
{
get
{
if (_selectedStudent == null)
{
_selectedStudent = new UCStudent();
}
return _selectedStudent;
}
set
{
if (_selectedStudent != value)
{
_selectedStudent = value;
OnPropertyChanged("SelectedStudent");
}
}
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
问题是当我将SelectedStudent属性设置为新选择的学生时,绑定不会更新。
答案 0 :(得分:1)
虽然我的方法使用泛型和表达式,所以我可以强烈键入我的属性更改,概念是相同的。在我使用表达式的地方,你使用一个字符串。如果PropertyChanged为null,您将要返回。否则,在没有首先声明新事件处理程序的情况下触发事件。
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged<T>(Expression<Func<T>> expression)
{
if (this.PropertyChanged == null) { return; }
string propertyName = GetPropertyName(expression);
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
此方法允许视图模型强烈键入通知。
this.NotifyPropertyChanged(() => this.SelectedApplication);