项源的条件静态资源
本文关键字:静态 资源 条件 | 更新日期: 2023-09-27 18:33:29
目前为了修复来自 telerik 的错误,我的 ItemsSource 必须指向我当前正在使用的视图模型。
关系.xaml
<UserControl.Resources>
<Client:PersonViewModel x:Key="MyViewModel"/>
</UserControl.Resources>
使用位置。
<Telerik:GridViewComboBoxColumn Header="Relationship"
ItemsSource="{Binding GridRelationshipTypes, Mode=TwoWay, Source={StaticResource MyViewModel}}"
DataMemberBinding="{Binding RelationshipType}"
SelectedValueMemberPath="Id"
DisplayMemberPath="Name"
IsReadOnly="False"/>
我还有其他四个视图模型需要应用此逻辑。我不想为这么小的事情创建 5 个不同的用户控件。我想知道我是否可以创建一个方法,以便它将检查当前视图模型类型是什么并使用相应的视图模型。
伪代码 - 视图模型类型是一个枚举。
public void StaticResourcToUse(ViewModelTypes viewModelType)
{
if (viewModelType == ViewModelTypes.PersonViewModel)
use personviewmodel resources
if (viewModelType == ViewModelTypes.BusinessViewModel)
use businessViewModel resources
}
如果我理解正确,您想要的是根据视图模型切换视图。
使用ContentControl
显示数据,并根据更改的属换触发器中的ContentTemplate
。
下面是 Rachel Lim 博客中的一个示例,该示例基于绑定属换模板:
<DataTemplate x:Key="CarTemplate" TargetType="{x:Type local:YourViewModel}">
<TextBlock Text="I'm a Car" />
</DataTemplate>
<DataTemplate x:Key="TrackTemplate" TargetType="{x:Type local:YourViewModel}">
<TextBlock Text="I'm a Track" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:YourViewModel}">
<ContentControl Content="{Binding }">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate" Value="{StaticResource CarTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding YourType}" Value="Track">
<Setter Property="ContentTemplate" Value="{StaticResource TrackTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>