(现在我正在研究MVVM)我正在尝试使用来自UI的输入数据更新当前数据(在视图模型中)。但问题是 ViewModel 不知道 View。这样就无法访问UI(例如TextBox.Text)中的输入数据。(在下面)MainPage.xaml包含两个用于获取输入数据的文本框和一个用于保存输入数据的按钮<StackPanel> <TextBox x:Name="NameTextBox" Margin="10" Header="Name text box" /> <TextBox x:Name="AgeTextBox" Margin="10" Header="Age text box"/> <StackPanel Orientation="Horizontal"> <Button x:Name="SaveButton" Content="" FontFamily="Segoe MDL2 Assets" Margin="30,10" CommandParameter="{x:Bind ViewModel.CreatedPerson, Mode=OneWay}" Command="{x:Bind ViewModel.SaveCommand}" Click="SaveButton_Click"/> </StackPanel> <StackPanel Orientation="Horizontal" Margin="20"> <TextBlock Text="{x:Bind ViewModel.Person.Name, Mode=OneWay}" /> <TextBlock Text="{x:Bind ViewModel.Person.Age, Mode=OneWay}" /> </StackPanel> </StackPanel>NameTextBox并AgeTextBox保留输入数据,直到SaveButton单击为止。(Person是具有名称和年龄属性的纯数据模型)请注意:SaveButton以上具有Command和Click事件两者SaveButton_Click 事件从 TextBoxes 获取数据并将它们保存在 ViewModel 中。我的问题是如何将UI数据(在TextBox中)作为参数传递SaveCommand?MainPageViewModel在视图中不了解TextBoxes。为了解决此问题,我SaveButton_Click在代码隐藏中创建事件以访问TextBoxes数据。SaveButton_Click从TextBoxes获取数据并将其保存到ViewModel(位于CreatedPerson属性处)。经过CreatedPerson设置,SaveCommand在视图模型执行更新Person属性。结果,当SaveButton点击时,SaveButton_Clicked事件会在之前触发SaveCommand。所以我的项目仍然可以正常工作,但是它闻起来很多。如何正确解决此问题?使用转换器?现在,我正在尝试使用转换器通过CommandParameter,但是卡住了。 SaveCommand需要Person对象作为参数,而Person对象需要两个数据(名称和年龄)。如何将两个参数传递给转换器?使用Tuple?:(出于好奇,单击事件始终在Command之前触发?
2 回答
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
在您的命令中,您可以使用parameter参数(不要求使用phun)
public void Execute(object parameter)
{
viewModel.Reply1 = new Models.Reports.Reply();
viewModel.ShowList = false;
}
在您的XAML中,您应按以下方式提供该参数:
<Button Command="{Binding UpdateCommand}" CommandParameter="TheParameterYouWantoToUseInTheExecute"
- 2 回答
- 0 关注
- 178 浏览
添加回答
举报
0/150
提交
取消