根据UserControl的数据类型设置窗口属性

时间:2010-05-10 03:35:17

标签: .net wpf datatemplate styles types

我有一个简单的窗口,它是各种视图的容器。我有一个DataTemplate,它根据窗口的MainViewModel属性设置显示正确的视图。

<DataTemplate DataType="{x:Type VM:StartupViewModel}">
    <AdornerDecorator>
        <V:StartupView />
    </AdornerDecorator>
</DataTemplate>

我想做的是某些视图,更改基本窗口上的一些属性,即WindowStyle,ResizeMode等类似触发器的东西,但是在数据类型而不是属性值上? 我怎么能做到这一点?

编辑:

经过一番谷歌搜索后,我想我想做这样的事情:

<Window.Style>
        <Style>
            <Setter Property="Window.WindowStyle"
                    Value="SingleBorderWindow" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self} , Path=DataContext.MainViewModel}"
                             Value="{x:Type VM:StartupViewModel}">
                    <Setter Property="Window.WindowStyle"
                            Value="None" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Style>

这个朗姆酒,但没有效果......

2 个答案:

答案 0 :(得分:0)

我不确定您是否可以直接绑定到数据类型。但您可以根据所选的数据类型在ViewModel中设置一些属性。反过来,您可以将WindowStyle属性绑定到此属性。

如果您能够以某种方式绑定到DataType,则可以使用BindingConverters并直接绑定到窗口属性。

答案 1 :(得分:0)

好吧,经过多次挫折之后,我发现了为什么它不能正常工作。绑定路径返回正确的对象,但由于Value是x:Type,它似乎是在比较实例对象和类型。所以我添加了一个简单的转换器,它返回一个对象的Type,并且它有效。

我假设如果我将我的值指定为x:Type,WPF会知道我想比较绑定的类型与值。很长一段时间我认为绑定很好,问题出在触发器上,据我所知,触发器应该有效。开始认为视觉工作室出了问题; D