我一直在网上搜索,但找不到我需要的答案。
我有一个列表,用户可以在其中选择一些项目。在我的ViewModel中,它看起来像这样:
public ObservableCollection<RentalItemVM> ChosenRentalItems {
get { return chosenRentalItems; }
set {
chosenRentalItems = value;
RaisePropertyChanged("ChosenRentalItems");
}
}
当用户完成选择时,他按下按钮以保存他的收藏。如果我像这样设置我的RelayCommand,它工作正常:
public RelayCommand<ObservableCollection<RentalItemVM>> FinishCommand { get; set; }
private void Finish(ObservableCollection<RentalItemVM> chosenItems) {
...
}
现在我需要获得UserId,所以经过一些研究后我发现我不能将多个参数传递给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>
现在这是我感到困惑的地方。我不知道如何绑定UserId和ChosenItems。 RelayCommand中的OrderVM参数为null,所以我可能需要先实例化它吗?
我在网上找到的大多数答案都是关于在View中显示来自ViewModel的数据,但几乎没有关于如何发布数据的答案(或者我搜索了错误的东西?)
答案 0 :(得分:1)
如果命令FinishCommand
与DataConext的视图模型相同,则也可以绑定UserId
。
<TextBox Text="{Binding UserId} " x:Name="UserId"></TextBox>
并从实现命令的ViewModel实例中获取UserId。
private void Finish(ObservableCollection<RentalItemVM> chosenItems) {
var userid = this.UserId;
foo(userid);
}