【问题标题】:Propagate changes in model to view in Silverlight传播模型中的更改以在 Silverlight 中查看
【发布时间】:2010-07-10 00:02:23
【问题描述】:

在我的 Silverlight 4 应用程序中,我有一个 ObservableCollection,我将其数据绑定到两个不同的列表框。显示 MyClass-Object 内容的列表框项。当我将一个项目添加到 ObservableCollection 时,新项目会正确显示在两个列表框中。

我已将绑定模式设置为两种方式,以便编辑列表框项将自动更新模型。到目前为止,这有效。我的问题是,另一个列表框的 content 不会随着更新的模型而更新。添加新项目将正确显示在另一个列表框中,但内容的更新(我检查过)不会。

任何想法如何实现:当我更新一个列表框中的内容时,另一个列表框的内容应该自动更新。

提前致谢,
弗兰克

【问题讨论】:

    标签: silverlight observablecollection model-view


    【解决方案1】:

    为了扩展卢克所说的你的类需要实现 INotifyPropertyChanged 并且你的属性需要在它们的设置器中抛出 PropertyChanged 事件。

    public class MyClass : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged; // This may be named wrong
    
        private string _myString = null;
    
        public string MyString
        {
            get { return _myString; }
            set
            {
                if(value == _myString)
                    return;
                _myString = value;
                var eh = PropertyChanged;
                if(eh != null)
                    eh(this, new PropertyChangedEventArgs("MyString"));
            }
        }
    }
    

    MyString 属性将通知 UI 它已更改,这将触发绑定更新。

    【讨论】:

    • 感谢代码!一个错误是,事件调用必须如下所示: PropertyChanged(this, new PropertyChangedEventArgs("Name"));
    • 我知道那是错误的,但我想不起确切的语法。谢谢指正。
    【解决方案2】:

    您需要确保可观察集合中的对象实现INotifyPropertyChanged,并且当您的内容属性更改时,它们应该发布更改事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2015-06-21
      • 2018-10-03
      相关资源
      最近更新 更多