为了账号安全,请及时绑定邮箱和手机立即绑定

Xaml,按钮的click事件在命令之前运行?

Xaml,按钮的click事件在命令之前运行?

C#
慕盖茨4494581 2021-05-25 14:13:10
(现在我正在研究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="&#xE105;" 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 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

在类后面的代码中,从构造函数设置视图模型对象。

您不应该同时使用Command和Click-event。


查看完整回答
反对 回复 2021-05-29
?
素胚勾勒不出你

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"



查看完整回答
反对 回复 2021-05-29
  • 2 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信