DataGrid SelectedItem 不更新
DataGrid SelectedItem not updating
所以我真的很困惑。
我创建了一个数据网格,以两种方式绑定其项目源并以两种方式绑定其选定项目。所选项目 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"); }
}
输出中没有显示绑定表达式错误或任何其他错误 window。
几个月前我遇到了类似的事情,由于某种原因,内部 DataGrid
ItemSource
没有正确设置,我设法通过使用 [ 绑定来解决这个问题=13=] 将 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}"
这个问题的答案其实很明显。
我忘了输入 UpdateSourceTrigger=PropertyChanged
所以它应该是这样的
<DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}"
SelectedItem="{Binding SelectedUnit,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False">
这解决了问题
所以我真的很困惑。
我创建了一个数据网格,以两种方式绑定其项目源并以两种方式绑定其选定项目。所选项目 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"); }
}
输出中没有显示绑定表达式错误或任何其他错误 window。
几个月前我遇到了类似的事情,由于某种原因,内部 DataGrid
ItemSource
没有正确设置,我设法通过使用 [ 绑定来解决这个问题=13=] 将 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}"
这个问题的答案其实很明显。
我忘了输入 UpdateSourceTrigger=PropertyChanged
所以它应该是这样的
<DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}"
SelectedItem="{Binding SelectedUnit,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False">
这解决了问题