我有一个用户定义的控件,我称之为SegmentView(派生自ContentControl)。另外,我有一个实现INotifyPropertyChanged的SegmentModel。 SegmentModel有一个名为StatusController的属性,还有一个StatusControllerViewModel。
对于我的大多数视图,我在XAML中自动创建视图模型,并将它们自身附加到模型上。然后,viewmodel将自动设置为视图的DataContext。
除了以下内容外,一切运作良好。 ModelToViewModelConverter创建一个viewmodel,附加模型,然后将viewmodel设置为控件的DataContext。这是它如何适用于其他几个方面。 另外在这种风格中,我有一个DataTrigger,只是改变了DockPanel的不透明度。 DockPanel的DataContext确实设置为StatusControllerViewModel的实例,但是找不到DataTrigger中的绑定。
Btw:StatusController是较大型号的属性,为简洁起见,此处未显示。一切都应该正确显示DataContext确实正确设置到StatusControllerViewModel。但是Binding讲述了一个不同的故事。看起来它并没有“看到”DockPanel的DataContext,而是看到了上面级别的DataContext。
该模型是StatusControllerViewModel的一个属性,可直接访问模型。
对此有何想法?
<Style>
<Style.Resources >
<converters:ModelToViewModelConverter x:Key="M2VM"/>
</Style.Resources>
<Setter Property = "Template" >
<Setter.Value >
<ControlTemplate TargetType="{x:Type views:SegmentView}">
<DockPanel x:Name= "DOCKER" DataContext= "{Binding StatusController, Converter={StaticResource M2VM}, ConverterParameter={x:Type cSharp:StatusControllerViewModel}}" >
<DockPanel.Style >
<Style TargetType= "{x:Type DockPanel}" >
<Setter Property= "Background" Value= "{x:Null}" />
<Setter Property= "Opacity" Value= "1" />
<Style.Triggers >
<DataTrigger Binding= "{Binding Path=Model.IsProgressRunning, IsAsync=True, Mode=OneWay}" Value= "True" >
<Setter Property= "Opacity" Value= "0.1" />
<Setter Property= "Background" Value= "Black">
</ DataTrigger >
</ Style.Triggers >
</ Style >
</ DockPanel.Style >
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>