0

私はWPFを使用しており、MVVMに従おうとしています。したがって、モデルをプロパティとして持つ VM があります。モデルには、コマンドを実装する model1 のリストであるプロパティがあります。コマンドをViewModelに移動したくないので、ビューにアクセスできるようになるのは、リストに含まれる要素の数がわからないため、コマンドがそのモデルにアクセスできるようにしたいからです1 . このコマンドはいくつかの処理も行います。この処理中に、コマンドにバインドされたボタンを保持するウィンドウを非表示にする必要があります。どうすればこれを達成できますか?どこを見ればいいですか?

4

1 に答える 1

1

このような場合、ViewModel にコマンドがあり、パラメーターを受け取るのが最適です。そうすれば、ユーザーが変更しようとしているアイテムが渡されます。あなたが持っている場合ItemsControl

<ItemsControl ItemsSource="{Binding MyItems}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding Name, StringFormat=Push {0}}"
                    Command="{Binding DataContext.ItemPushedCommand, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
                    CommandParameter="{Binding}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

ViewModel では、次のようにコマンドを定義します (プリズムの DelegateCommand を使用しています。使い慣れたコマンドを使用できます)。

private readonly DelegateCommand<Model> itemPushedCommand;

public ICommand ItemPushedCommand { get { return itemPushedCommand; } }

public MyViewModel()
{
    itemPushedCommand = new DelegateCommand<Model>(OnItemPushed);
}

private void OnItemPushed(Model item)
{
    // your item has been pushed!
}
于 2013-07-06T23:01:07.513 に答える