我有一个简单的窗口,它是各种视图的容器。我有一个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>
这个朗姆酒,但没有效果......
答案 0 :(得分:0)
我不确定您是否可以直接绑定到数据类型。但您可以根据所选的数据类型在ViewModel中设置一些属性。反过来,您可以将WindowStyle属性绑定到此属性。
如果您能够以某种方式绑定到DataType,则可以使用BindingConverters并直接绑定到窗口属性。
答案 1 :(得分:0)
好吧,经过多次挫折之后,我发现了为什么它不能正常工作。绑定路径返回正确的对象,但由于Value是x:Type,它似乎是在比较实例对象和类型。所以我添加了一个简单的转换器,它返回一个对象的Type,并且它有效。
我假设如果我将我的值指定为x:Type,WPF会知道我想比较绑定的类型与值。很长一段时间我认为绑定很好,问题出在触发器上,据我所知,触发器应该有效。开始认为视觉工作室出了问题; D