gpt4 book ai didi

WPF DataGrid ItemsSource 不会在更改源时更新

转载 作者:行者123 更新时间:2023-12-04 05:42:31 26 4
gpt4 key购买 nike

我已经阅读了一些帖子,但没有人帮助我解决我的问题。
所以,我有一个带有 Viewmodel 的 View ,并且在 View 内部有一个 DataGrid 绑定(bind)到 viewmodel 内的 ObservableCollection。
所选项目也绑定(bind)到类型 T == ObservableCollection

public ObservableCollection<TableProperty> TableProperties
{
get
{
return tableProperties;
}
set
{
if (tableProperties != value)
{
tableProperties = value;
OnPropertyChanged("TableProperties");
}
}
}

public TableProperty Property
{
get
{
return property;
}
set
{
property = value;
OnPropertyChanged("Property");
}
}

这里是DataGrid:
<toolkit:DataGrid AutoGenerateColumns="False" 
UseLayoutRounding="True"
ItemsSource="{Binding Path=TableProperties,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,NotifyOnTargetUpdated=True}"
SelectedItem="{Binding Path=Property,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
[...]>
<toolkit:DataGrid.Columns>

现在我想实现一个逻辑,改变一个复选框触发一个命令设置所选项目的一些值:
<toolkit:DataGridTemplateColumn Header="Mandatory" IsReadOnly="False">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<CheckBox IsChecked="{Binding Path=Mandatory,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=MandatoryDB}" Value="True">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=MandatoryDB}" Value="False">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<cmd:EventToCommand Command="{Binding Path=DataContext.SetMandatory, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
</StackPanel>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>

这是它背后的命令:
 private void OnSetMandatory()
{
property.Visible = true;
property.ReadOnly = false;
property.VisibleInGrid = true;
property.UIPropertyName = DateTime.Now.TimeOfDay.ToString();
OnPropertyChanged("Property");
OnPropertyChanged("TableProperties");
}

问题是:当我更改属性时,集合内的项目也已更新,并且它在 Property Getter 中正常运行......
如果我调用 Datagrid.Items.Refresh() 直接在 View 内部,它也会正确显示值,但不会自动更新集合。

那么你有什么想法吗? :)

最佳答案

TableProperty 类必须实现 INotifyPropertyChanged 并正确提升它。

关于WPF DataGrid ItemsSource 不会在更改源时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com