मेरे पास मेरे मॉडल वर्ग में एक संपत्ति है जो इस प्रकार है जो एक एनम है।

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

मेरे वीएम में जो पूरे दृश्य का डेटाकॉन्टेक्स्ट है, मैं निम्नानुसार मान सेट कर रहा हूं,

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 पर सेट है

समस्या यह है कि जब मैं कनवर्टर क्लास के अंदर ब्रेकपॉइंट रखता हूं तो यह कभी हिट नहीं होता है। लेकिन जब यह चल रहा होता है तो मैं . बाध्यकारी पथ से, ब्रेकपॉइंट कनवर्टर पर आता है। ContentControl का DataContext सक्रिय के रूप में दिख रहा है जो कि एनम राज्यों में से एक है। फिर भी बंधन काम नहीं कर रहा है। कृपया मदद कीजिए।

0
nikhil 15 अप्रैल 2020, 18:40

1 उत्तर

सबसे बढ़िया उत्तर

DataTemplate वास्तव में लागू नहीं हो रहा है। यह नहीं कर सकता।

DataTemplate या सामान्य तौर पर ContentControl.ContentTemplate ContentControl.Content प्रॉपर्टी पर लागू होंगे, न कि ContentControl.DataContext पर।
इसका मतलब यह है कि DataTemplate का DataContext, ContentControl का DataContext नहीं है, बल्कि Content या ContentControl.Content संपत्ति का मूल्य है।

टेम्प्लेट को काम करने के लिए, आपको DataContext के बजाय Content सेट करना होगा:

<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>
1
BionicCode 15 अप्रैल 2020, 16:08