1

我已成功将控件绑定到页面上的属性。我绑定的属性返回一个类。绑定有效,但如果我将属性设置为类的新实例,则 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#注意父窗口实现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 属性设置为新选择的学生时,绑定不会更新。

4

1 回答 1

1

虽然我的方法使用泛型和表达式,所以我可以强烈键入我的属性更改,但概念是相同的。在我使用表达式的地方,您使用字符串。如果 PropertyChanged 为空,您将想要返回。否则,在首先声明新的事件处理程序的情况下触发事件。

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);
于 2012-07-02T22:51:10.473 回答