ICollection.Add(item)不会引发propertychanged MVVM datagrid

时间:2015-10-16 14:27:53

标签: c# wpf entity-framework mvvm datagrid

我的问题是: 我首先使用EF代码并且我得到了一个主要细节情况,主人有一个孩子,他们是数据网格的itemsSource,如下所示:

<DataGrid ItemsSource="{Binding Path=Transaction.StockItems,Mode=TwoWay}" 
          SelectedItem="{Binding Path=StockItem, Mode=TwoWay}" 
          AutoGenerateColumns="False" IsReadOnly="True">
    <DataGrid.Columns>
        <mui:DataGridTextColumn Width="0.12*" Binding="{Binding Name}"/>
        <mui:DataGridTextColumn Width="0.12*" Binding="{Binding Cod}"/>
        <mui:DataGridTextColumn Width="0.12*" Binding="{Binding Cost}"/>
        <mui:DataGridTextColumn Width="0.15*" Binding="{Binding Qt}"/>
    </DataGrid.Columns>
</DataGrid>

在我的ViewModel中,我获得了Transaction属性的属性,如下所示:

    private tTran_t;
    public tTransaccion Transaction
    {
        get { return _t; }
        set { _t= value; RaisePropertyChanged("Transaction"); }
    }

在我的ViewModel的其他方法中,我对集合执行Add(),如下所示:

    Transaction.StockItems.Add(myNewLine);
    RaisePropertyChanged("Transaction");

在我的模型中,Transaction.StockItems的定义是ICollection

问题:数据网格永远不会更新

我想这是因为永远不会调用RaisPropertyChanged(),因为从未设置过集合,但正如您所见,我确实调用了RaisPropertyChanged()对象的Transaction。 / p>

提前致谢

1 个答案:

答案 0 :(得分:0)

向集合添加项目不会“更改”对象本身。设置集合本身时会引发RaisepropertyChanged。所以你需要做的是为你的集合参考分配一个新的集合。首先,您将项目添加到临时集合,然后执行transaction = new collection(temporaryCollection),然后您的UI将收到更改通知。