CommandParameter
のメソッドにViewModel
を渡そうとしています。これを行う方法?
private void Open(object sender)
{
if (sender==this.objMainWindow.btnHistory)
{
objMainWindow.Container.Child = objHistory;
}
if (sender == this.objMainWindow.btnNew_Item)
{
objMainWindow.Container.Child = objNewItem;
}
if (sender == this.objMainWindow.btnSide_Effects)
{
objMainWindow.Container.Child = objSideEffect;
}
}
これは、ViewModel
で渡したいCommandParameter
の私の名前です。ボタンにはCommandParameter
を使用します。
「ViewModel」はMVVMを意味します。 MVVMを実行している場合、ビューモデルにビューを渡すことはできません。通常、XAMLで次のようなことを行います。
<Button Content="Edit"
Command="{Binding EditCommand}"
CommandParameter="{Binding ViewModelItem}" >
そして、これはあなたのビューモデルで:
private ViewModelItemType _ViewModelItem;
public ViewModelItemType ViewModelItem
{
get
{
return this._ViewModelItem;
}
set
{
this._ViewModelItem = value;
RaisePropertyChanged(() => this.ViewModelItem);
}
}
public ICommand EditCommand { get { return new RelayCommand<ViewModelItemType>(OnEdit); } }
private void OnEdit(ViewModelItemType itemToEdit)
{
... do something here...
}
明らかにこれはポイントを説明するためだけのものであり、ViewModelItemという名前の編集するプロパティが1つしかない場合は、コマンドパラメーターとして渡す必要はありません。
あなたがビューモデルに要素を渡すことにその特定の場合あなたが使用することができます
CommandParameter="{Binding ElementName=ManualParcelScanScreen}"
データバインディング構文を使用するだけです。例えば、
<Button x:Name="btn"
Content="Click"
Command="{Binding ClickCmd}"
CommandParameter="{Binding ElementName=btn,Path=Content}" />
データバインディングを使用してビューモデルからデータを取得できるだけでなく、データをビューモデルに戻すこともできます。 CommandParameterでは、ElementNameを使用して、バインディングソースを明示的に宣言する必要があります。
個人的には、次のように.Tag属性を使用します。
<Button Content="Button" Click="Button_Click" Tag="{Binding .}"></Button>
次に、オブジェクト全体を取得するために:
private void Button_Click(object sender, RoutedEventArgs e)
{
var btn = sender as Button;
var myViewModel = btn.Tag as MyViewModel;
...
}