使用viewmodel中的Datagrid.Items.Refresh()

时间:2012-01-10 10:23:59

标签: wpf xaml mvvm datagrid

我正在使用MVVM模式。 我想使用datagrid的refresh方法。 我也经历了以下链接,其有用: How to refresh a WPF DataGrid?

但我的问题是:我在viewmodel中创建了一个datagrid对象,如下所示:

    public DataGrid ActiveGrid=new DataGrid();
public void RefreshGrid()
        {
           View.Dispatcher.Invoke((Action)(() =>
                ActiveGrid.Items.Refresh()

                ));
        }

我的datagrid的itemsource已绑定到另一个集合,例如

<DataGrid x:Name="ActiveGrid"
                      IsReadOnly="True"                      
                      ItemsSource="{Binding ActiveCallCollection}"
                       SelectedItem="{Binding ActiveGridCollection,
                                             Mode=TwoWay}" SelectionMode="Single"
                      Visibility="{Binding IsActiveCallsSelected,
                                           Converter={StaticResource BooleanToVisibilityConverter}}"
                      d:LayoutOverrides="Height">

如何将ActiveGrid绑定到xaml数据网格。

2 个答案:

答案 0 :(得分:0)

如果你的ViewModel中有一个DataGrid对象,那么它就不再是MVVM了。你最好问一下你想要达到的目标,所以我们可以帮助你。

如果你绑定到OberservableCollection - 你应该这个一次!然后,所有更改(添加,删除)都会反映在您的数据网格中。

请在您创建/更改集合的位置发布代码

答案 1 :(得分:0)

如果使用MVVM设计模式,则视图模型不应具有DataGrid

相反,您的View应该有DataGrid,并且应该绑定到ViewModel中的ObservableCollection

请确保绑定 ItemsSource属性,而不是设置,否则对ObservableCollection的更改可能无法在UI中自动更新

<DataGrid x:Name="ActiveGrid"
          IsReadOnly="True"                      
          ItemsSource="{Binding ActiveCallCollection}"
          SelectedItem="{Binding Selected ActiveCall}" 
          SelectionMode="Single"
          Visibility="{Binding IsActiveCallsSelected,
                               Converter={StaticResource BooleanToVisibilityConverter}}"
          d:LayoutOverrides="Height">