我正在使用 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(最新穩定版)。
uj5u.com熱心網友回復:
當系結到的屬性更改時,您可以簡單地更改第二個選擇器專案SelectedIndex。
由于您使用的是 MVVM CommunityToolkit,要在屬性更改后執行一些代碼,您必須實作在自動生成的類中定義的部分方法。這種方法稱為On<YourPropertyName>Changed().
檢查這個答案:https ://stackoverflow.com/a/72499605/7977288
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/489028.html
