我正在使用 MVVM 开发带有 .NET Maui 的 Windows 桌面应用程序。
我有 2 个Pickers
具有ImageSource
并SelectedIndex
绑定到视图模型中的属性。当从第一个项目中选择一个Picker
项目时,需要更改另一个项目。我想将SelectedIndexChanged
事件绑定到视图模型中的方法来完成此操作。
选择器中事件的 XAMLPicker
如下所示:
<Picker SelectedIndexChanged="{Binding OnSelectedIndexChanged}" />
viewmodel 中的方法如下所示:
public void OnSelectedIndexChanged(object sender, EventArgs e)
{
// do stuff
}
但是运行程序时出现以下错误:
XFC0009 未找到“SelectedIndexChanged”的属性、BindableProperty 或事件,或者值和属性之间的类型不匹配。MauiApp1
我的临时解决方案是在事件触发时从后面的代码中调用 viewmodel 方法。后面的代码如下所示:
private void Picker_SelectedIndexChanged(object sender, EventArgs e)
{
(BindingContext as MainViewModel).OnSelectedIndexChanged(sender, e);
}
我想让代码尽可能地呆在后面。有没有办法SelectedIndexChanged
通过直接绑定到视图模型中的方法来处理事件?
更新尝试实施partial void On<PropertyName>Changed()
我的视图模型:
public partial class MainViewModel : ObservableObject
{
[ObservableProperty]
private ObservableCollection<ProductGroupRoot> itemSourceProductGroups = new();
[ObservableProperty]
private int selectedProductGroup = -1;
[ObservableProperty]
private ObservableCollection<ProductRoot> itemSourceProducts = new();
[ObservableProperty]
private int selectedProduct = -1;
// other properties
partial void OnSelectedProductGroupChanged(int value)
{
// TODO: change values in ItemSourceProducts
}
}
自动生成的代码应该已经为部分方法创建了一个定义,但是我得到了错误:
CS0759 找不到用于实现部分方法“MainViewModel.OnSelectedProductGroupChanged(int)”的声明的定义声明
我正在使用 CommunityToolkit.Mvvm v7.1.2(最新稳定版)。
当绑定到的属性更改时,您可以简单地更改第二个选择器项目SelectedIndex
。
由于您使用的是 MVVM CommunityToolkit,要在属性更改后执行一些代码,您必须实现在自动生成的类中定义的部分方法。这种方法称为On<YourPropertyName>Changed()
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句