数据绑定似乎只在MainWindow()WPF中起作用

时间:2016-05-11 11:12:25

标签: c# wpf xaml binding propertychanged

我有点迷失了,我试图将我的GUI上的标签绑定到我的代码中的字符串但是如果我将代码放在我的MainWindow()块中并且我无法更新它似乎只有工作它来自其他任何地方。

这是我的INotifyPropertyChanged类:

        public class MyClass : INotifyPropertyChanged
    {
        private string _testLabel;

        protected void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
                handler(this, e);
        }

        protected void OnPropertyChanged(string propertyName)
        {
            OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
        }

        public string testLabel
        {
            get { return _testLabel; }
            set
            {
                if (value != _testLabel)
                {
                    _testLabel = value;
                    OnPropertyChanged("testLabelChanged");
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

这是MainWindow()块:

        public MainWindow()
    {
        InitializeComponent();
        testLabelName.DataContext = t;
        t.testLabel = "Hello World 32432";
    }

我也在外面宣布:

MyClass t = new MyClass();

这是我的XAML的片段:

<Label Name="testLabelName" Content="{Binding Path=testLabel, Mode=OneWay}" Height="28" Margin="0,0,12,29" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="128" />

我尝试通过使用按钮事件来设置标签来测试它,它似乎设置但GUI上没有任何变化。我认为GUI没有在PropertyChanged事件上更新。这是对的吗?

谢谢,

3 个答案:

答案 0 :(得分:2)

我认为您的代码存在一个小问题。当您触发PropertyChanged事件时,您需要指定属性的名称。您对该属性的代码应如下所示:

    public string testLabel
    {
        get { return _testLabel; }
        set
        {
            if (value != _testLabel)
            {
                _testLabel = value;
                OnPropertyChanged("testLabel"); // not testLabelChanged
            }
        }
    }

除非您为属性指定正确的名称,否则UWP无法知道哪个属性实际已更改,因此不会更新UI。

答案 1 :(得分:0)

请更改:

OnPropertyChanged("testLabelChanged");

为:

OnPropertyChanged("testLabel");

答案 2 :(得分:0)

你是什么意思&#34;其他地方&#34; ?