gpt4 book ai didi

c# - 模型方法绑定(bind)在 xaml 中不起作用

转载 作者:行者123 更新时间:2023-12-03 10:27:34 25 4
gpt4 key购买 nike

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

这是我的 xaml 代码。 ObjectXCollection 是我的 View 模型中的一个属性。 IsSelected 和 Value 是 Object_X 的属性,并且该绑定(bind)运行良好。 ExpandButtonHandler 也被定义为 Object_X 类中的一个方法,但它给了我错误。如果我删除该 click 属性,我的代码将构建并运行良好。我的模型正在实现 INotifyPropertyChanged,这就是属性绑定(bind)正常工作的原因。有人可以提出解决方案,或者有人可以看到问题吗?

    <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>

最佳答案

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

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

最终结果看起来像这样:

<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();
}

关于c# - 模型方法绑定(bind)在 xaml 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33109094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com