我怀疑这个问题已在其他地方得到解答,但我找不到它的生命,所以请耐心等待我。我对MVVM& XAML所以,如果我完全错误地吠叫,请告诉我。
我正在开发一个不同级别的教育应用程序。在每个级别的打开屏幕上有一个按钮(绑定到VM中的命令),该按钮显示一个模式弹出窗口,其中包含有关该级别的信息。
窗口总是看起来一样 - 有一个标题,一个图标,然后是一些描述性的“东西”。这是导致我困难的“东西” - 有时是文本,有时是文本和图像,格式不同等等。
目前我有一个Window控件,其标题和图标绑定到视图模型上的属性,但正如我目前所看到的那样,“stuff”的视觉特性使它成为另一个视图,所以我放了一个contentpresenter进入窗户,这就是我脱离困境的地方。
“stuff”没有与之关联的视图模型,因为它由不同视觉事物的随机集合组成 - 图像,文本等,因此我无法将内容设置为viewmodel并让隐式datatemplate做它。
当没有相应的视图模型时,如何选择我想在窗口中显示“东西”的视图?或者,我是否完全以错误的方式解决这个问题?
稍微冗长的问题,但我希望这是有道理的。
由于
麦克
答案 0 :(得分:0)
如果您还没有查看模型,可以在运行时使用Content属性添加/删除元素。
在其他情况下,您可以使用ContentPresenter的ContentTemplateSelector属性。
<ContentPresenter ContentTemplateSelector="{StaticResource templateSelector}" />
答案 1 :(得分:0)
您可以使用DataTriggers更改模板。假设您有一个视图模型,其中包含一个属性,您希望使用该属性来确定控件的显示方式,为了参数I&#39,请将其设为枚举:
<Control>
<Control.Style>
<Style TargetType="{x:Type Control}">
<Style.Triggers>
<DataTrigger Binding="{Binding Flag}" Value="{x:Static local:SomeFlag.TypeA}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock Text="I am type A" />
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Flag}" Value="{x:Static local:SomeFlag.TypeB}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock Text="I am type B" />
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Flag}" Value="{x:Static local:SomeFlag.TypeC}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock Text="I am type C" />
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Control.Style>
</Control>
您需要做的就是为父控件/窗口添加样式,然后为每个值添加数据触发器:
{{1}}