You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI.NET中如何通过ViewModel绑定从自定义控件获取值

MAUI.NET 自定义ABCPicker控件绑定到ViewModel属性的正确配置

问题根源

你的代码存在几个关键错误导致绑定失效:

  1. 错误使用附加属性:自定义控件自身的属性应使用普通BindableProperty,附加属性是为其他控件扩展属性设计的,不适合作为自身属性使用。
  2. Picker绑定目标错误:XAML中直接绑定了ChoosenDeviceTypeProperty静态字段,而非控件的实例属性。
  3. 绑定模式枚举错误:BindingMode.TSimpleTwoWay是无效值,正确枚举为BindingMode.TwoWay。

修正步骤

1. 重构ABCPicker后台代码,改用普通可绑定属性

替换附加属性为控件自身的可绑定属性,并添加对应的实例属性:

public partial class ABCPicker : ContentView
{
    // 定义普通可绑定属性
    public static readonly BindableProperty ChoosenDeviceTypeProperty = 
        BindableProperty.Create(nameof(ChoosenDeviceType), typeof(string), typeof(ABCPicker), 
                               "Detect by connect", BindingMode.TwoWay);

    // 供绑定使用的实例属性
    public string ChoosenDeviceType
    {
        get => (string)GetValue(ChoosenDeviceTypeProperty);
        set => SetValue(ChoosenDeviceTypeProperty, value);
    }

    public ABCPicker()
    {
        BindingContext = this;
        InitializeComponent();
    }
}

2. 修正ABCPicker的XAML绑定

将Picker的SelectedItem绑定到控件的ChoosenDeviceType实例属性:

<ContentView ...
         x:Class="XYZ.Views.ABCPicker"
         x:DataType="views:ABCPicker">
    <Grid>
        <Picker ItemsSource="{Binding ...}" SelectedItem="{Binding ChoosenDeviceType, Mode=TwoWay}"/>
    </Grid>
</ContentView>

3. 确认父控件BroaderControlView的绑定(无需修改)

原代码中的绑定配置已经正确,保持即可:

<views:ABCPicker ChoosenDeviceType="{Binding MyResult, Mode=TwoWay}" />

4. 验证ViewModel中的命令逻辑

现在MyResult会自动同步ABCPicker的选中值,可直接在命令中使用:

MyCommand = new Command(() =>
{
    // MyResult已同步最新选中值,直接使用即可
    // 后续业务逻辑
});

额外说明

  • 若确实需要使用附加属性(为其他控件扩展该属性),则Picker的绑定需改为附加属性语法:SelectedItem="{Binding Path=(views:ABCPicker.ChoosenDeviceType), Source={RelativeSource Self}, Mode=TwoWay}",但自定义控件自身属性优先使用普通可绑定属性更简洁。
  • 确保BaseViewModel的SetPropertyAndNotify方法正确实现了INotifyPropertyChanged接口,这是双向绑定生效的核心前提。

内容的提问来源于stack exchange,提问作者jaydopartu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:10:37