【问题标题】:DataGrid SelectedItem not updatingDataGrid SelectedItem 未更新
【发布时间】:2015-02-03 12:19:36
【问题描述】:

所以我在这里真的很困惑。

我创建了一个数据网格,以两种方式绑定其 itemsource 并以两种方式绑定其选定项。选定的项目 getter 被调用,但 setter 永远不会调用。所有的碎片似乎都在这里。我错过了什么?

 <DataGrid ItemsSource="{Binding Properties ,Mode=TwoWay}" 
                  SelectedItem="{Binding SelectedProperty ,Mode=TwoWay}" 
                  CanUserDeleteRows="False"  CanUserAddRows="False" AutoGenerateColumns="False" Background="LightBlue">

   <DataGrid.Columns>
      <DataGridTextColumn IsReadOnly="True"  Header="Address" Binding="{Binding Address}"/>
   </DataGrid.Columns>
   <DataGrid.RowDetailsTemplate>
     <DataTemplate>
        <DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}" 
                  SelectedItem="{Binding SelectedUnit, Mode=TwoWay}" 
                  CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False">

我的第一个数据网格工作正常,包括所选项目。

但是,第二个第三个和第四个嵌套网格不绑定到所选项目。项目来源有效,但仅此而已

   public class PropertyModel : ModelBase
   {
    private ObservableCollection<UnitModel> _Units;

    public ObservableCollection<UnitModel> Units
    {
        get { return _Units; }
        set { _Units = value; }
    }
    private UnitModel _SelectedUnit;

    public UnitModel SelectedUnit
    {
        get { return _SelectedUnit; }
        set { _SelectedUnit = value; OnPropertyChanged("SelectedUnit"); }
    }

输出窗口中没有显示绑定表达式错误或任何其他错误。

【问题讨论】:

  • 我绕过了我的问题,将两个ItemsControl 用于我的网格,一些用于RowHeaderColumnHeader。如果有办法使用DataGrid

标签: c# wpf datagrid


【解决方案1】:

这个问题的答案其实很明显。

我忘了把 UpdateSourceTrigger=PropertyChanged

应该是这样的

 <DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}" 
       SelectedItem="{Binding SelectedUnit,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
       CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False">

这解决了问题

【讨论】:

  • 谢谢,我被困在这两天了。
  • 天哪,这太痛苦了。我可以输入 "SelectedItem="{Binding LoadOfRubbish" 并且它仍然可以编译。Windows 突出显示选定的项目,但 WPF 让我通过一个愚蠢的过程来访问它。为什么,为什么,为什么,为什么,为什么?
【解决方案2】:

几个月前我遇到了类似的情况,由于某种原因,内部 DataGrid ItemSource 没有使用这种方式正确设置,我设法通过使用 ElementName 绑定来设置 RowDetail DataGrid ItemSource 到父级中的SelectedItem

<DataGrid x:Name="DataGrid" ItemsSource="{Binding Properties ,Mode=TwoWay}" 
                  SelectedItem="{Binding SelectedProperty ,Mode=TwoWay}" 
                  CanUserDeleteRows="False"  CanUserAddRows="False" AutoGenerateColumns="False" Background="LightBlue">

   <DataGrid.Columns>
      <DataGridTextColumn IsReadOnly="True"  Header="Address" Binding="{Binding Address}"/>
   </DataGrid.Columns>
   <DataGrid.RowDetailsTemplate>
     <DataTemplate>
        <DataGrid ItemsSource="{Binding SelectedItem.Units ,Mode=TwoWay,ElementName=DataGrid}" 

【讨论】:

  • 所以这个解决方案不起作用,这就是原因。问题不在于 itemssource 没有填充。这很好用。问题是嵌套网格的选定项绑定到的属性未设置。我已经测试了您的解决方案,包括添加 SelectedItem={Binding ElementName=PropertiesGrid, Path=SelectedItem, Mode=TwoWay"}否则
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2012-01-04
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多