C# 模型方法绑定在xaml中不起作用

C# 模型方法绑定在xaml中不起作用,c#,xaml,mvvm,data-binding,uwp,C#,Xaml,Mvvm,Data Binding,Uwp,我正在使用MVVM创建一个UWP应用程序。在我的xaml视图中,我有一个绑定到ObservableCollection的ListView,Object_X是一个模型。此列表视图中绑定到我的xaml视图的Object_X的其他属性工作正常。但是,我在这个列表视图中有一个按钮,我想将其单击事件绑定到我在Object_X类中定义的方法,但是当我编译代码时,我得到了一个“对象引用未设置为对象错误的实例” 这是我的xaml代码。ObjectXCollection是我的视图模型中的一个属性。IsSelect

我正在使用MVVM创建一个UWP应用程序。在我的xaml视图中,我有一个绑定到ObservableCollection的ListView,Object_X是一个模型。此列表视图中绑定到我的xaml视图的Object_X的其他属性工作正常。但是,我在这个列表视图中有一个按钮,我想将其单击事件绑定到我在Object_X类中定义的方法,但是当我编译代码时,我得到了一个“对象引用未设置为对象错误的实例”

这是我的xaml代码。ObjectXCollection是我的视图模型中的一个属性。IsSelected和Value是Object_X的属性,绑定工作得很好。ExpandButtonHandler也被定义为Object_X类中的一个方法,但它给了我一个错误。如果我删除了那个click属性,我的代码就会生成并运行良好。我的模型正在实现INotifyPropertyChanged,这就是属性绑定正常工作的原因。有人能提出解决方案吗,或者有人能看到问题吗

    <ListView ItemsSource="{Binding ObjectXCollection, Mode=TwoWay}">
         <DataTemplate>
                <StackPanel Orientation="Horizontal">
                <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" IsThreeState="True">
                    <TextBlock Text="{Binding Value}"/>
                </CheckBox>
                <Button Content=">>>" Click="{Binding ExpandButtonHandler}"></Button>
            </StackPanel>
        </DataTemplate>
    </ListView>

您不能绑定到方法,也不能将绑定分配给EventHandler。默认情况下,只能将DependencyProperties设置为绑定对象

通常,如果我想基于UI事件触发一些ViewModel代码,我将使用一个允许您在UI事件处理程序中使用绑定的

最终结果如下所示:

<Button x:Name="ExpandButton" Content=">>>"
        local:CommandBehavior.Event="Click"
        local:CommandBehavior.Action="{Binding ExpandButtonHandler}" />

经典的
Binding
不允许直接绑定到方法,但新编译的绑定
x:Bind
允许。你可以阅读



我也尝试了x:Bind,但仍然出现相同的错误。我还尝试显式声明x:DataType,尽管我知道它推断出正确的数据类型,因为我的属性绑定工作正常,但它仍然没有工作。@user3079315方法ExpandButtonHandler的签名是什么?public void ExpandButtonHandler()另外,我使用的是prism MVVM,因此,我没有对象发送器等我尝试绑定的方法不在我的viewmodel中,而是在我的模型中。listview绑定到我的ViewModel中的ObservableCollection,但是使用数据模板,数据类型就变成了我的Object_X,这就是为什么绑定到模型的属性工作得非常好的原因。我不明白为什么我不能绑定到这些方法,因为它应该使用它用于属性绑定的对象_X的同一个实例。@user3079315没关系,但答案仍然是一样的。WPF绑定无法绑定到方法。它们只能绑定到公共属性。有一些,但是我仍然建议使用
ICommand
和AttachedCommand行为。
private void ExpandButton_OnClick(object sender, EventArgs e)
{
    var vm = ExpandButton.DataContext as SomeViewModel;
    vm.ExpandButtonHandler();
}
<Button Click="{x:Bind ExpandButtonHandler}" Content=">>>" />