WinUI3中ComboBox选中项双向绑定失效问题求助
WinUI3 ComboBox 双向绑定问题解决
直接在XAML中定义ComboBoxItem完全可行,不用非得绑定ViewModel里的列表,问题出在绑定属性的选择和类型匹配上:
你当前绑定的是SelectedItem,而它对应的是ComboBoxItem对象,不是你ViewModel里的字符串类型MyProp,所以初始赋值"1"或"2"无法匹配到对应的ComboBoxItem,选择项时也没法把字符串回写回去。
有两种简单的解决方式:
方式一(推荐):改用SelectedValue绑定
修改XAML,绑定SelectedValue并指定SelectedValuePath="Content",这样就能直接和字符串类型的MyProp双向绑定:
<ComboBox Width="200" SelectedValue="{Binding MyProp, Mode=TwoWay}" SelectedValuePath="Content"> <ComboBoxItem Content="1"/> <ComboBoxItem Content="2"/> </ComboBox>
SelectedValuePath="Content"告诉ComboBox:取每个ComboBoxItem的Content属性值作为SelectedValue的绑定值- 这样初始给
MyProp赋值"1",ComboBox会自动选中对应项;手动选择项时,Content的字符串也会回写到MyProp
方式二:调整MyProp的类型为ComboBoxItem(不推荐)
如果一定要用SelectedItem绑定,需要把ViewModel里的MyProp类型改成ComboBoxItem,初始赋值时创建对应的实例:
// ViewModel中的代码 public ComboBoxItem MyProp { get; set; } = new ComboBoxItem { Content = "1" };
这种方式不推荐,因为ViewModel依赖了UI层的ComboBoxItem类型,不符合MVVM的分层原则。
内容的提问来源于stack exchange,提问作者Konrad
相关产品推荐
相关产品推荐

