C# 如何更新DataGrid.RowDetailsTemplate的DataTemplate
Im my viewmodel我有一个类型为C# 如何更新DataGrid.RowDetailsTemplate的DataTemplate,c#,wpf,xaml,user-interface,C#,Wpf,Xaml,User Interface,Im my viewmodel我有一个类型为IPC.Device的自定义对象列表,绑定到定义为 private ObservableCollection<IPC.Device> _devices; public ObservableCollection<IPC.Device> Devices { get { return _devices; } set { _devices = value;
IPC.Device
的自定义对象列表,绑定到定义为
private ObservableCollection<IPC.Device> _devices;
public ObservableCollection<IPC.Device> Devices
{
get
{
return _devices;
}
set
{
_devices = value;
RaisePropertyChangedEvent ("Devices");
}
}
您可以看到
[DataMember]
beacsue我在很多地方使用这种结构,也用于IPC。我还有其他属性标记为[DataMember]
,因此我将排除这一点,作为发生这种情况的原因DeviceStatus
是一个枚举。有几种可能
- 您可以为
,则不需要替换中的对象Device.deviceStatus
,只需修改属性即可ObservableCollection
- 您可以替换整个
可观察采集
设备=新建 可观察收集…
- 您可以删除和插入元素:
Devices.RemoveAt(i)代码>
Devices.Insert(i,新设备())代码>
<DataGrid x:Name="MainGrid" ItemsSource="{Binding Path=Devices}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False">
<DataGrid.Columns>
....
<DataGridTemplateColumn Header="{Binding Source={x:Static p:Resources.device_status},
Converter={StaticResource CapitalizeFirstLetterConverter}}"
Width="*" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=deviceStatus, Converter={StaticResource DeviceStatusToStringConverter}, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
....
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<Views:CameraLoginControl Visibility="{Binding Path=deviceStatus, Converter={StaticResource DeviceStatusUnauthorizedConverter}, Mode=OneWay}" />
<Views:TestSelectionControl Visibility="{Binding Path=deviceStatus, Converter={StaticResource DeviceStatusOnlineConverter}, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
public class Device
{
[DataMember]
public DeviceStatus deviceStatus { get; set; }
...
}