WPF绑定到单个';行';数据网格的(不是列)是否可能?

WPF绑定到单个';行';数据网格的(不是列)是否可能?,wpf,data-binding,datagrid,combobox,Wpf,Data Binding,Datagrid,Combobox,我有一个数据网格。datagrid的一列是一个简单的,其CellTemplate包含一个,其中包含一个,例如 <my:DataGrid Name="dataGridMain" AutoGenerateColumns="False"> <my:DataGrid.Columns> <my:DataGridTemplateColumn Header="Food" > <my:DataGridTemplateColumn

我有一个数据网格。datagrid的一列是一个简单的
,其CellTemplate包含一个
,其中包含一个
,例如

<my:DataGrid Name="dataGridMain" AutoGenerateColumns="False">
   <my:DataGrid.Columns>
       <my:DataGridTemplateColumn Header="Food" >
           <my:DataGridTemplateColumn.CellTemplate >
               <DataTemplate>
                  <ComboBox Name="comboDataTemplate" 
                            Text="{Binding Path=Food, 
                                           Mode=TwoWay, 
                                           UpdateSourceTrigger=PropertyChanged}"
                            ItemsSource="{Binding Source={StaticResource resFoodLookups}}"
                            DisplayMemberPath="FoodName" 
                            SelectedValuePath="FoodID" IsEditable="True" />
                </DataTemplate>
           </my:DataGridTemplateColumn.CellTemplate>
       </my:DataGridTemplateColumn>
    </my:DataGrid.Columns>
</my:DataGrid>

一切正常。由于
ItemsSource=“{Binding Source={StaticResource resFoodLookups}}”语句,每个组合框都绑定到一个静态列表


但我的要求是,该列表将随行而变化

也就是说:每次用户在一行的组合框列表中键入一个新条目时,我希望它在下一行的选择中可用

基本上,每次用户在任意行的组合框中插入新词时,我都希望为用户创建一个新列表。(组合框是可编辑的)

现在,我可以在运行时连接“ItemsSource=…”,但我只能这样做一次,因此
会将“相同”列表传播到“所有”行上的“所有”组合框


我的想法是我需要更改ItemsSource=。。。在DataTemplate创建后在内存中创建的每个组合框上逐个对象地创建属性,但我不知道如何执行此操作。

您需要做的是执行与ItemsSource的双向数据绑定,这样,当在其中一个组合框中更新ItemSource时,它将自动更新您的原始集合,从而更新其他组合框


我通常使用MVVM模式。如果您还没有在应用程序上使用特定的模式,那么值得进行一些研究

使用它来解决您的问题,我将执行以下操作:

  • 创建一个ViewModel(我们称之为MyViewModel),其中包含一个名为“MyComboxItems”的值集合(使用ObservableCollection进行数据绑定非常重要)

  • 当我创建包含表的窗口/控件时,我还创建了MyViewModel的实例,并将其设置为Window.DataContext=myViewModelInstance

  • 对于组合框绑定,请使用ItemsSource=“{binding Path=mycomboxItems,Mode=TwoWay}


  • 是的,好的。这似乎是一个解决方案,但如何设置组合框的ItemsSource属性?在运行时,我可以在代码中的其他组合框上设置ItemsSource属性,而不会出现任何问题。例如,myComboBox1.ItemsSource=\u MyListofString;MyCombox2.ItemsSource=App.DataLayer.GetUniqueFoods();但我似乎无法“找到”驻留在datagrid的DataTemplate中的组合框。类似于:((DataGridTemplateColumn)dataGridMain.Columns[0])。CellTemplate.DataTemplate.comboDataTemplate.ItemsSource=;(我知道这是错误的,但您明白我的意思吗?)如果我在构建时设置组合框的ItemsSource属性(使用XAML),我如何用数据“加载”我的初始对象?也许我把事情复杂化了?嗨,Leigh,啊,是的,我明白了。如果“MyComboxItems”可观察集合被排序,或者某个项目被删除,组合框条目就会消失。我想数据绑定在这里搞砸了。你能提出一个解决方法吗?Jack,你能给我一些建议吗您当前问题的详细信息?数据绑定现在能正常工作吗?