Style中的DataContext在DataTrigger中不可用

时间:2016-07-15 17:31:55

标签: c# wpf data-binding

我有一个用户定义的控件,我称之为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>

0 个答案:

没有答案