Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更新DataGrid.RowDetailsTemplate的DataTemplate_C#_Wpf_Xaml_User Interface - Fatal编程技术网

C# 如何更新DataGrid.RowDetailsTemplate的DataTemplate

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;

Im my viewmodel我有一个类型为
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,新设备())

能否发布IPC.Device的型号代码?我想为Device.deviceStatus实现INotifyPropertyChanged,但我不知道如何实现。你能给我一个提示吗?@OttavioCampana最终RemoveAt+Insert解决方案是最好的。
<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; }

    ...
}