[英]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.