【问题标题】:WPF Datagrid MVVM : Combobox Binding using DatagridTemplateColumnWPF Datagrid MVVM:使用 DatagridTemplateColumn 的组合框绑定
【发布时间】:2025-12-08 22:20:06
【问题描述】:

使用 Datagridtemplatecolumn 将 WPFDatagrid 绑定到组合框。很难获得组合框绑定的 selectedItem。找到了类似的例子,但这并没有解决我的问题。

请在下面找到我的 XAML 的代码 sn-p 和数据结构:

public class X
{
    public X ()
    {
        abc = new ObservableCollection<P>();
    }

    public ObservableCollection<P> Y
    {
        get { return abc; }
        set { abc = value; PropertyChanged("Y"); }
    }
}

public class P
{
    private string id;
    private string name;

    public string ID
    {
        get
        {
            return id;
        }
        set
        {
            id = value;
            InvokePropertyChanged("ID");
        }
    }

    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
            InvokePropertyChanged("Name");
        }
    }
}

我在上面定义了一个实现 INotifyPropertychanged 接口的数据结构。

    <controls:DataGrid Name="datagrid" AutoGenerateColumns="False" ItemsSource="{Binding XList}" Grid.Row="0"
                   SelectedItem="{Binding SelectedX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

        <controls:DataGrid.Columns>
            <controls:DataGridTemplateColumn Header="Yl">
                <controls:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox ItemsSource="{Binding Y}" 
                                  IsSynchronizedWithCurrentItem="False" DisplayMemberPath="Name"
                                  SelectedValue="{Binding Path=SelectedY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"
                                  SelectedValuePath="SelectedY" 
                                  SelectedItem="{Binding SelectedY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  />
                    </DataTemplate>
                </controls:DataGridTemplateColumn.CellTemplate>
            </controls:DataGridTemplateColumn>
        </controls:DataGrid.Columns>
    </controls:DataGrid>

现在,在视图模型中,有一个 X 列表的可观察集合,即 XList,即绑定到 XAML 中的数据网格。并在绑定到组合框的数据网格的每一行中都有 Y。有一个属性为 SelectedY,绑定到组合框的 SelectedItem。 还有一个属性作为 SelectedX 绑定到数据网格的 selectedItem,它工作正常。

Issue 无法获取 Combobox 的 Selected Item 绑定。选择已更改时,无法为组合框设置所选项目。

谁能帮我设置组合框的选定项绑定?

【问题讨论】:

    标签: wpf mvvm wpfdatagrid


    【解决方案1】:

    您的数据上下文设置在哪里? 你可以这样做:

    <controls:UserControl x:Name=MainControl>
         <controls:UserControl.DataContext>
            <classpath:X/>
         </controls:UserControl.DataContext>
         <controls:DataGrid ItemsSource={Binding YourItemsContainer}>
              <controls:DataGrid.Columns>
                   <controls:DataGridComboBoxColumn ItemsSource={Binding ElementName=MainControl,Path=DataContext.Y}
                                           SelectedItem={Binding ElementName=MainControl,Path=DataContext.SelectedY}
    DisplayMemberPath=Name />
              </controls:DataGrid.Columns>
         </controls:DataGrid>
    </controls:UserControl>
    

    这个想法是为连接到数据上下文的根元素设置一个名称,然后您可以通过路径轻松访问它的数据上下文属性。当您在模板中时,数据上下文是 ItemsSource 对象。

    希望对你有所帮助!

    【讨论】:

      最近更新 更多