1

DataTemplate入れたものがResourceDictionaryあり、にボタンがあり、これをウィンドウDataTemplateに入れました。DataTemplateボタンコマンドをのプロパティにバインドしたいのですがwindowViewModel、どうすればよいですか?これはコードです:

 <DataTemplate DataType="{x:Type types:User}" x:Key="UserTemp">
    <Grid  >
        <Button  Command="{Binding  RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ????}, AncestorLevel=1}, Path=SelectLocationCommand}" />
    </Grid>
</DataTemplate>

およびWindow.xaml

<ContentControl x:Name="UserTemp" />

およびWindowViewModelの場合:

  public ICommand SelectLocationCommand
    {
        get {return new RelayCommand(selectLocationCommand); }
    }
    void selectLocationCommand()
    {
        _welcomeTitle = "AA";
    }
4

1 に答える 1

2

簡単に言えば、コードで行う必要はないということです。

DataTemplate を「User」オブジェクトのテンプレートとして定義しました。これは、ユーザー オブジェクトが UI でどのように表示されるかを意味します。したがって、DataTemplate を使用するには、WindowViewModel に「User」インスタンスが必要です。これは、SelectLocationCommand が WindowViewModel ではなく、User オブジェクトにある必要があることを意味します。

以上のことをすべて述べたので、コードは次のようになります。

Window.xaml で

<ContentControl Content="{Binding User}" ContentTemplate="{StaticResource UserTemp}" />

WindowViewModel 内

public User User {get;set}

ユーザー内

public ICommand SelectLocationCommand
{
    get {return new RelayCommand(selectLocationCommand); }
}
void selectLocationCommand()
{
    _welcomeTitle = "AA";
}

また、Window.xaml の DataContext が WindowViewModel であることを確認してください。これを行うにはいくつかのより良い方法がありますが、最も簡単な方法は次のとおりです。

Window.xaml.cs 内

public MainWindow()
{
    InitializeComponent();
    this.DataContext = new WindowViewModel();
}
于 2012-04-09T13:35:55.610 に答える