DataGrid SelectedItem未更新

Ant*_*ell 6 c# wpf datagrid

所以我在这里非常困惑.

我创建了一个datagrid,以两种方式绑定其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">
Run Code Online (Sandbox Code Playgroud)

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

但是,第二个第三个和第四个嵌套网格不会绑定到所选项目.物品来源有效,但就是这样

   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"); }
    }
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*ell 8

实际上答案很明显.

我忘了把UpdateSourceTrigger = PropertyChanged

所以看起来应该是这样的

 <DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}" 
       SelectedItem="{Binding SelectedUnit,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
       CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False">
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题

  • 天哪,这太痛苦了。我可以输入“SelectedItem=”{Binding LoadOfRubbish”,它仍然可以编译。Windows 突出显示所选项目,但 WPF 让我经历一个愚蠢的过程来访问它。为什么,为什么,为什么,为什么,为什么? (2认同)