【问题标题】:Linq databinding update when item in collection has changed当集合中的项目发生更改时,Linq 数据绑定更新
【发布时间】:2011-07-08 19:59:52
【问题描述】:

我希望在绑定到我的视图的项目发生更改时更新数据库。我注意到在 linq 类中触发了 PropertyChanged 事件,但是我如何告诉我的视图模型发生了一些变化? 我使用 Linq 类作为我的模型,所以我不必重新创建它,这是不好的做法吗?我知道我可以在我的 Linq 类 true 或 false 中创建一个新属性,并从我的 viewmodel 中使用该属性,但这不会太有效,因为我每次需要从 SQL 更新类时都必须重做。

【问题讨论】:

    标签: wpf linq binding inotifypropertychanged


    【解决方案1】:
    • View 和 Model 之间的分离是 ViewModel 的主要职责之一。否则模型将被视图特定属性和数据格式污染。
    • ViewModel 应该将 Model 包装为属性并将它们公开给 View,并且随着 View 修改包装的 ViewModel 属性,它可以反过来调用模型特定的方法。

    因此,不要将 linq 类直接绑定到视图,而是通过 ViewModel 中的属性公开它们。就个人收集项目通知而言,这里是您可以使用的something

    【讨论】:

    • 嗯...什么?这如何回答所提出的问题?
    • 对,我有点理解 mvvm 的概念,我不确定其他人是否通常使用生成的 linq 类作为模型,但我认为其他人会。如果你不这样做,那么你将不得不构建一个几乎相同的类。那么再次通知我的 viewModel 我的一个集合中的属性已更改的最佳方式是什么?
    • 您是否有一个模型集合需要绑定到视图,那么您应该在您的视图模型中公开一个 ObservableCollection 属性,但这只会通知添加/删除。如果您对每个项目的属性感兴趣,您应该阅读更多内容stackoverflow.com/questions/269073/…
    【解决方案2】:

    只是为了让其他人知道我为这个场景做了什么。我确实尝试了 anivas 发布的链接并且它有效,但并不像我为我的解决方案提出的那样简单。 我将所选项目绑定到我的模型视图上的一个属性,因为它是唯一可以由用户更改的项目。在我的属性的设置器上,我为 notifyProperty 更改了一个处理程序。请参阅下面的代码 私有 CustAccountLocation _selectedStore;

        public CustAccountLocation SelectedStore
        {
            get { return _selectedStore; }
            set {
    
                _selectedStore = value;
                SelectedStore.PropertyChanged += new PropertyChangedEventHandler(SelectedStore_PropertyChanged);
                NotifyPropertyChanged("SelectedStore");
            }
        }
    
        void SelectedStore_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            StoreNeedsSave = true;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多