【问题标题】:WPF DataGrid Binding on Columns列上的 WPF DataGrid 绑定
【发布时间】:2011-07-20 18:08:22
【问题描述】:

希望没有人问过这个问题,但我找不到答案。 我在我的 xaml 中将 ViewModel 设置为 DataContext。在这个 ViewModel 中是一个 List 属性。经销商有一些属性应该显示在数据网格中(作为列,但不是全部)。我试图这样实现它:

<Grid x:Name="myGrid" DataContext="{Binding Source={StaticResource createGameVM}}">
...
   <DataGrid Name="dealerList" AutoGenerateColumns="False" ItemsSource="DealerList">
      <DataGrid.Columns>
         <DataGridTextColumn Header="ID" Width="30"  Binding="{DealerId}" />                        
         <DataGridTextColumn Header="Name" Width="*" Binding="{DealerName}" />                       
      </DataGrid.Columns>
   </DataGrid>
...
</Grid>

在这种情况下,ViewModel 中的 PropertyChanged 为空,因此当 DealerList 更改时不会更新任何内容。 (但在设置 DataContext 之前在 DealerList 中的项目会正确显示)。 不知道怎么解决。

【问题讨论】:

    标签: wpf datagrid binding


    【解决方案1】:

    改为绑定到 ViewModel 上的 ObservableCollection&lt;Dealer&gt;。这样它就会在集合发生变化时自动更新。

    【讨论】:

      【解决方案2】:

      试试这个:

      <Grid x:Name="myGrid" DataContext="{Binding Source={StaticResource createGameVM}}">
      ...
         <DataGrid Name="dealerList" AutoGenerateColumns="False" ItemsSource="{Binding DealerList}">
            <DataGrid.Columns>
               <DataGridTextColumn Header="ID" Width="30"  Binding="{DealerId}" />                        
               <DataGridTextColumn Header="Name" Width="*" Binding="{DealerName}" />                       
            </DataGrid.Columns>
         </DataGrid>
      ...
      </Grid>
      

      【讨论】:

        【解决方案3】:

        除了使用 ObservableCollection 之外,您还可以创建自己的派生列表类并实现 INotifyCollectionChanged。

        【讨论】:

          猜你喜欢
          • 2014-12-15
          • 1970-01-01
          • 2013-10-23
          • 2015-07-02
          • 1970-01-01
          • 2011-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多