2016-02-05 26 views
0

目前为了修复来自telerik的错误,我的ItemsSource必须指向我正在使用的viewmodel。条件静态资源对于Itemsource

Relationship.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个不同的UserControls。我想知道是否可以创建一个方法来检查当前viewmodel类型是什么,并使用相应的viewmodel。

PseudoCode - ViewModelTypes是一个枚举。

public void StaticResourcToUse(ViewModelTypes viewModelType) 
{ 
    if (viewModelType == ViewModelTypes.PersonViewModel) 
     use personviewmodel resources 
    if (viewModelType == ViewModelTypes.BusinessViewModel) 
     use businessViewModel resources 
} 

回答

1

如果我正确理解你想要的是基于视图模型切换你的视图。

使用ContentControl来显示数据,并在基于更改的属性的触发器中换出ContentTemplate

Here's an example in Rachel Lim's blog的是,CDS基于绑定属性中的模板:

<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>