项源的条件静态资源

本文关键字:静态 资源 条件 | 更新日期: 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>