(现在我正在研究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之前触发?
慕斯709654
素胚勾勒不出你
相关分类