2016-02-05 47 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>