4

我正在尝试实现以下 INotifyPropertyChanged 扩展:

自动 INotifyPropertyChanged(接受的答案) http://ingebrigtsen.info/2008/12/11/inotifypropertychanged-revisited/

但我无法弄清楚为什么我的 PropertyChanged EventHandler 保持为空。:(

我做了一个非常简单的 WPF 应用程序来测试它,这是我的 XAML 代码:

<StackPanel Orientation="Vertical">
    <TextBox Text="{Binding Path=SelTabAccount.Test, UpdateSourceTrigger=PropertyChanged}"></TextBox>
    <TextBox Text="{Binding Path=SelTabAccount.TestRelated, UpdateSourceTrigger=PropertyChanged}"></TextBox>
</StackPanel>

而我背后的代码:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private TabAccount _selTabAccount;

    public TabAccount SelTabAccount
    {
        get { return _selTabAccount; }
        set
        {
            _selTabAccount = value;
            PropertyChanged.Notify(() => this.SelTabAccount);
        }
    }

    public MainWindow()
    {
        InitializeComponent();

        SelTabAccount = new TabAccount()
        {
            Test = "qwer",
            TestRelated = ""
        };
    }
}

public partial class TabAccount : INotifyPropertyChanged
{
    private string _test;

    public string Test
    {
        get { return _test; }
        set
        {
            _test = value;
            PropertyChanged.Notify(() => this.Test);
            PropertyChanged.Notify(() => this.TestRelated);
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

public partial class TabAccount
{
    private string _testRelated;

    public string TestRelated
    {
        get
        {
            _testRelated = Test + "_Related";
            return _testRelated;
        }
        set
        {
            _testRelated = value;
            PropertyChanged.Notify(() => this.TestRelated);
        }
    }
}

在后面的代码中,您将看到一个具有 2 个属性的类(它只是随机测试的一部分),这些属性应该通知属性更改但没有任何反应。

NotificationExtension 是顶部提供的链接的复制和粘贴,位于外部 cs 文件中。

我还尝试使用“正常”的 INotifyPropertyChanged 实现来做示例,这可以按预期工作,但我不能用这个扩展类来实现它。

希望你能帮我弄清楚。提前致谢。

4

2 回答 2

4

仅当您向可视对象提供一些数据源时,绑定才会起作用。如果您不提供任何数据源并想深入研究属性,则绑定将不起作用。

在 MainWindow 构造函数下,将 Window 的 DataContext 属性设置为数据源。例如:

 public MainWindow()
 {
    InitializeComponent();

   // your property setups

    this.DataContext = this; 
 }

本质上,这使得 MainWindow 属性可用于绑定到 MainWindow 项的可视树。

于 2013-08-28T10:15:17.313 回答
1

您必须设置 Window 的 DataContext。您可以在初始化组件之后在窗口的构造函数中执行此操作。

this.DataContext = this;

这应该可以解决问题。

谢谢

于 2013-08-28T09:52:54.607 回答