当前位置: 首页 > 知识库问答 >
问题:

WPF Datagrid MVVM : 使用 DatagridTemplateColumn 的组合框绑定

宦高岑
2023-03-14

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

请在下面找到我的 XAML 的代码片段和数据结构:

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绑定到组合框。有一个属性为S审视,绑定到组合框的选择项目。还有一个属性为选择X,绑定到数据网格的选择项目,这工作正常。

问题无法获取组合框的所选项目绑定。当选择更改时,无法为组合框设置所选项目。

任何人都可以帮助我设置组合框的选定项绑定吗?

共有1个答案

庄经国
2023-03-14

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

<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>

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

希望对你有一点帮助!

 类似资料:
  • 问题内容: 我正在使用Eclipse IDE开发桌面(秋千)应用程序。我有三个组合框(国家,州和城市),选择新的国家或省时需要自动更新数据。我搜索了很多信息,但是我发现的所有实现都是在Ajax或NetBeans中的bean绑定框架上完成的。我通过ItemEvent尝试了一种解决方案,但是在启动应用程序时遇到了问题,该应用程序加载了国家列表,但没有加载其他列表。通过选择一个国家,国家列表而不是城市列

  • 我是C#新手,我不断收到以下无法删除的错误。 我的代码如下,我不能确切地说出哪一行导致了错误,但我怀疑它与RibbonRadioButtons有关,因为如果我删除它们,我不会得到错误。只有在单击两个或更多单选按钮后,错误才会出现。ComboBoxItem上的一个回答继续抛出绑定错误,尽管style暗示是多个Refresh()语句导致了这个问题,但我不知道如何避免这个问题。 有人能帮我解决这个问题吗

  • 我有一个包含以下列的表格: 表在在线数据库中。我使用dataset.xsd文件和连接字符串在客户端和在线数据库之间进行通信。 以下是我使用的一些方法:

  • 我没有在.xaml中指定任何特殊的内容,所以我将省略该部分。除此之外,我希望能够使用Name属性设置SelectedItem。我非常希望答案在代码后面,但如果它愚蠢地复杂,只有xaml的答案也一样好。我没有MVVM的任何经验,我可以假设它会被建议。随着我对WPF的深入研究,我当然会扩展我在这方面的知识,但现在我只想让它发挥作用 这不是家庭作业 编辑:忘记列出我也会遇到的错误 系统.Windows。

  • 我创建了绑定到viewmodel相同属性的combobox和textblock 结果是在组合框中显示错误的selecteditem(总是第一个)。Textblock总是有正确的值。当我在combobox中选择不同的值时,textblock会正确更新。如果我移除 IsSynchronizedWithCurrentItem=“真” 然后组合框显示“空”值。语言的选择项目应该有正确的对象(通过调试)。

  • 我的表单上有2个组合框(在表单加载事件中)。第一个组合框在表单加载后从选择语句中获取一个值。我想在我的第二个组合框中使用该值。这是我的代码: 1st组合框= cbDelivery 2de组合框= cbOrderNo 此组合框位于: private void CB delivery _ selectedindex changed(对象发送方,事件参数e) 因此,一旦我从1ste组合框中选择一个值,我