数据模板内的自绑定不起作用

Self Binding inside datatemplate not working

我的模型 class 中有一个 属性,如下所示,它是一个枚举。

public class VmOutputCarouselBarCodeServiceControlData : BindableBaseThreadSafe
{
 private SensorBufferState _lockStatus;
 public SensorBufferState LockStatus
        {
            get => _lockStatus;
            set => Set(ref _lockStatus, value);
        }
}

在我的VM中,它是整个视图的DataContext,我设置的值如下,

public class VM
{
public VmOutputCarouselBarCodeServiceControlData VmOutputControlData { get; set; }
public VM()
{
VmOutputControlData=new VmOutputCarouselBarCodeServiceControlData();
VmOutputControlData.LockStatus=SensorBufferState.Active;
}
}


    public enum SensorBufferState
    {
        Default,
        Active,
        InActive,
        Error
    }

在我的 xaml 中,我在数据模板中有一个数据模板,如下所示:

<DataTemplate x:Key="OutputTemplate">
<Grid>
 <ContentControl Grid.Row="0" 
                 Grid.Column="1" 
                 DataContext="{Binding VmOutputControlData.LockStatus}" 
                 ContentTemplate="{StaticResource ErrorContentControl}"/>
</Grid>
</DataTemplate>

 <DataTemplate x:Key="ErrorContentControl">
                <Grid>
                    <Rectangle x:Name="SensorStatusRectangle"
                               Fill="{Binding Path=.,Mode=OneWay,Converter={StaticResource SensorBufferToColorConverter}}"
                               Height="30"
                               Width="60"/>
                </Grid>
            </DataTemplate>

在xaml.cs

整个视图的数据上下文设置为 VM

问题是当我在转换器中保留一个断点时 class 它永远不会命中。但是当我删除 .从绑定路径,断点来到转换器。 ContentControl 的 DataContext 显示为 Active,这是枚举状态之一。但是绑定不起作用。请帮忙。

DataTemplate实际上没有申请。不能。

DataTemplate 或一般来说 ContentControl.ContentTemplate 将适用于 ContentControl.Content 属性 而不是 ContentControl.DataContext.
这意味着 DataTemplateDataContext 不是 ContentControlDataContext,而是 ContentContentControl.Content 属性.

要使模板工作,您必须设置 Content 而不是 DataContext:

<ContentControl Content="{Binding VmOutputControlData.LockStatus}" 
                ContentTemplate="{StaticResource ErrorContentControl}"/>

现在 ContentControl 有内容,DataTemplate 将被应用,绑定将解析并调用转换器。

<DataTemplate DataType={x:Type SensorBufferState}">
  <Grid>
    <Rectangle x:Name="SensorStatusRectangle"
               Fill="{Binding Path=., Mode=OneWay, Converter={StaticResource SensorBufferToColorConverter}}" />
  </Grid>
</DataTemplate>