私はウェブを検索していますが、必要な答えが見つかりません。ViewModelラッパーにデータをバインドし、パラメータとしてRelayCommandに渡す方法はありますか?
私はユーザーがいくつかの項目を選択できるリストを持っています。私のViewModelでは、それは次のようになります。ユーザーが選択し終わったら
public ObservableCollection<RentalItemVM> ChosenRentalItems {
get { return chosenRentalItems; }
set {
chosenRentalItems = value;
RaisePropertyChanged("ChosenRentalItems");
}
}
、彼は彼のコレクションを保存するためのボタンを押します。 I
public RelayCommand<ObservableCollection<RentalItemVM>> FinishCommand { get; set; }
private void Finish(ObservableCollection<RentalItemVM> chosenItems) {
...
}
今、私は同様にユーザーIDを取得する必要があるので、いくつかの研究の後、私はそうRelayCommandに複数のparamaterを渡すことができないことがわかった:Iセットアップは、このように私のRelayCommandがあればそれが正常に動作しますラッパーが必要です。私は新しいViewModelに作られました:
public class OrderVM {
public int UserId { get; set; }
ObservableCollection<RentalItemVM> ChosenItems { get; set; }
}
をし、これにRelayCommandを変更:
public RelayCommand<OrderVM> FinishCommand { get; set; }
private void Finish(OrderVM order) {
...
}
、私はここからXAMLのUserControlを変更:これに
<StackPanel Orientation="Horizontal"
Grid.Row="3"
Grid.ColumnSpan="2"
VerticalAlignment="Center"
HorizontalAlignment="Center">
<TextBox Text="UserId" />
<Button Content="Finish"
Command="{Binding FinishCommand}"
CommandParameter="{Binding ChosenRentalItems}"
UseLayoutRounding="False"
FontSize="24" />
</StackPanel>
:
<StackPanel Orientation="Horizontal"
Grid.Row="3"
Grid.ColumnSpan="2"
VerticalAlignment="Center"
HorizontalAlignment="Center">
<TextBox Text="UserId"
x:Name="UserId" />
<Button Content="Finish"
Command="{Binding FinishCommand}"
CommandParameter="{Binding OrderVM}"
UseLayoutRounding="False"
FontSize="24" />
</StackPanel>
ここで私はnfused。 UserIdとChosenItemをバインドする方法がわかりません。 RelayCommandのOrderVMパラメータはnullなので、最初にインスタンス化する必要がありますか?私はウェブ上で発見
ほとんどの答えは、ビューにビューモデルからのデータを表示するとしていたが、データをポストする方法にはほとんど答えない(または私は間違ったことで検索?)
問題を再考した後、私もそれについて考えていました。しかし、実際にOrderVMをバインドする方法はありませんか? – Sensei
あなたは 'ValueConverter'を使うことができますが、あなたは同じ問題に遭遇すると思います。 – Roland