繁体   English   中英

模型方法绑定在XAML中不起作用

[英]Model method binding not working in xaml

我正在使用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设置为Binding对象。

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

最终结果如下所示:

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

另一种解决方案是仅在模型后面使用代码,然后在DataContext上手动调用该方法。 不太理想,但这是一个选择。

private void ExpandButton_OnClick(object sender, EventArgs e)
{
    var vm = ExpandButton.DataContext as SomeViewModel;
    vm.ExpandButtonHandler();
}

经典Binding不允许直接绑定到方法,但是新的已编译绑定x:Bind允许。 您可以在此处阅读有关编译数据绑定的更多信息

<Button Click="{x:Bind ExpandButtonHandler}" Content=">>>" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM