【问题标题】:WPF MVVM - ComboBox binding selected valueWPF MVVM - ComboBox 绑定选定值
【发布时间】:2025-12-18 15:30:01
【问题描述】:

编辑
解决方案实际上是对 SelectedItemSelectedValueSelectedValuePath 属性的正确设置。

<ComboBox
         Grid.Column="1"
         Padding="5"
         DisplayMemberPath="PositionName"
         IsSynchronizedWithCurrentItem="False"
         ItemsSource="{Binding Positions, Mode=OneWay}"
         SelectedItem="{Binding SelectedOperatorPosition, Mode=TwoWay, 
         UpdateSourceTrigger=PropertyChanged}"
         SelectedValue="{Binding SelectedOperatorPosition.PositionName}"
         SelectedValuePath="PositionName" />

问题 我正在尝试使用 MVVM 模式将 ComboBox SelectedValue 与 DataGrid SelectedItem 绑定。
ComboBox ItemSource 是 Shifts 属性。我希望它的 SelectedValue 与 SelectedShift 属性绑定,每次用户从 DataGrid 中选择另一个 OperatorModel 时都会更新该属性。
尽管 SelectedOperator 设置器将 SelectedShift 值设置为 SelectedOperator.Shift,但 ComboBox 不会更新。

View
Debugging ViewModel Property setter

我的视图模型:

private Operator selectedOperator;

public Operator SelectedOperator
{
    get
    {
        return selectedOperator;
    }
    set
    {
        selectedOperator = value;
        if (selectedOperator != null)
        {
            SelectedShift = selectedOperator.Shift;
        }
        OnPropertyChanged(nameof(SelectedOperator));
    }
}

private Shift selectedShift;

public Shift SelectedShift
{
    get
    {
        return selectedShift;
    }
    set
    {
        selectedShift = value;
        OnPropertyChanged(nameof(SelectedShift));
    }
}

XAML:

<ComboBox
         Grid.Column="1"
         Padding="5"
         DisplayMemberPath="Name"
         ItemsSource="{Binding Shifts}"
         SelectedValue="{Binding SelectedShift}"
         SelectedValuePath="Name" />

【问题讨论】:

标签: c# wpf mvvm combobox


【解决方案1】:

我认为你应该使用 SelectedItem="{Binding SelectedShift}

【讨论】:

  • @ZhichaoXing 我已经尝试过 SelectedItem、SelectedValue 和 SelectedValuePath 的不同变体。其中任何一个都不起作用。