功能绑定规范

时间:2016-11-19 10:14:17

标签: c# wpf xaml mvvm

我是WPF和MVVM的新手,我正在Microsoft's site上看一个例子,但是,我不知道绑定是如何完成的。在链接的示例中,有这段代码:

public partial class MainPage : UserControl
{
    private PartInventoryViewModel viewModel;

    public MainPage()
    {
        InitializeComponent();
        viewModel = new PartInventoryViewModel();
        this.DataContext = viewModel;
    }

    private void PartSearchButton_Click(object sender, RoutedEventArgs e)
    {
        viewModel.GetParts();
    }
}

显然:

  

当用户单击PartSearchButton时,它会通知ViewModel实例。

但是怎么样?对于示例中的PartSearchButton,上面的XAML中没有绑定。这是一个规范性的,如果你命名你的函数YourButtonName_Clicked(),它将在单击按钮时触发?或者,如果使用(object sender, RoutedEventArgs e)参数创建函数,它是否会成为监听器?或者是否有一些本教程没有显示的XAML,绑定发生在哪里?

感谢您的回答,对不起,如果它是新手。

2 个答案:

答案 0 :(得分:0)

Microsoft未显示此处所需的所有代码。基本上,此代码所做的就是将DataContext设置为新实例化的ViewModel。 PartSearchButton_Click是一个简单的Click-Event-Handler,在XAML文件中看起来应该是这样的:

<Button Click="PartSearchButton_Click">Search</Button>

整个绑定事件发生在xaml文件的datagrid的这两行中:

ItemsSource="{Binding Parts}" 
SelectedItem="{Binding CurrentPart, Mode=TwoWay}"

这告诉DataGrid它应该在当前的DataContext中查找名为Parts的公共属性。您将DataContext设置为PartInventoryViewModel的新实例,因此需要在其中的某个位置存在公共属性Parts。我猜这个PartInventoryViewModel课程将在微软网站上进一步解释。

答案 1 :(得分:0)

您链接中的XAML代码段实际上缺少该事件处理程序。

<source>_<event>指南是命名事件处理程序的约定,但决不会将该函数自动绑定到相应的事件;您必须以编程方式或在XAML中添加处理程序。

也就是说,将应用程序逻辑与按钮相关联通常是通过命令而不是事件处理程序在WPF中完成的。视图模型公开类型为ICommand的属性,并且视图将Command(或其他控件)的Button依赖项属性绑定到它。如何在引擎盖下实现该命令与视图完全无关。