2012-02-22 3 views
0

ItemTemplateSelectorを持つItemsControlがあり、一部のテンプレートでは、パラメータを使用してViewModel(必要に応じてViewModelLocatorを使用できます)を作成する必要があります。どうしたらいいですか?コンバータを使用するのは唯一の方法ですか?ViewModelのテンプレートセレクタと作成

<DataTemplate x:Key="DataGridTemplate"> 
     <Control:MyView DataContext="???CreateViewModelWithParameter" /> 
    </DataTemplate> 

答えて

0

ObjectDataProviderを使用し、データコンテキストをバインドします。

わかりやすくするために、以下のサンプルはボタン用です。あなたのボタンコントロールにも同じことをしてください。 「Joe」というテキストを持つウィンドウとボタンが表示されます。

ビューモデル:

public class MyVM 
{ 
    public string name { get; set; } 
    public MyVm(string n) { 
     name = n; 
    } 
} 

ビュー:

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:clr="clr-namespace:System;assembly=mscorlib" 
    xmlns:so="clr-namespace:SO" 
    Width="300" Height="200" 
    x:Class="SO.MainWindow" 
    Title="SO Sample" 
    > 
    <Window.Resources> 
     <ObjectDataProvider x:Key="datasrc" ObjectType="{x:Type so:MyVm}"> 
      <ObjectDataProvider.ConstructorParameters> 
       <clr:String>Joe</clr:String> 
      </ObjectDataProvider.ConstructorParameters>    
     </ObjectDataProvider> 
    </Window.Resources> 
    <Button DataContext="{Binding Source={StaticResource ResourceKey=datasrc}}" Content="{Binding Path=name}" /> 
</Window> 
関連する問題