【问题标题】:Combobox in Datagrid: Values missingDatagrid 中的组合框:缺少值
【发布时间】:2015-04-05 01:30:18
【问题描述】:

我敢打赌这是一件很容易的事#更新:不是#,但我没有在XAML找到纯正的独奏。

我有两个对象:ObservableCollection 与“Tasks”作为ItemsSourceDatagrid。还有一个ObservableCollectionstring 应该是combobox 中的值。 Task 的名称绑定到第一列。到目前为止一切顺利,这行得通。

现在我想在第二列中添加combobox 并选择一些参数。 选择应绑定到taskExecutingCore 属性。

我想我把 DataGridComboBoxColumn ItemsSource 搞砸了。我将如何在此处进行此绑定以使我的值显示为下拉列表?

<DataGrid Grid.Column="3" ItemsSource="{Binding Database.list_Tasks}" 
    HorizontalAlignment="Left" Margin="21,52,0,0" VerticalAlignment="Top"
    Height="262" Width="205" AutoGenerateColumns="False">
       <DataGrid.Columns>
          <DataGridTextColumn Header="Task" Binding="{Binding Task_Spec_Name}"/>
          <DataGridComboBoxColumn 
                Header="Executing core" Width="100"
                ItemsSource="{Binding list_CoreID}" 
                SelectedItemBinding="{Binding ExecutingCore, Mode=TwoWay}"/>
          </DataGrid.Columns>
    </DataGrid>

list_CoreID 不是Database.list_Tasks 的属性。 ViewModelDataContext

ViewModel.Database.list_Tasks

ViewModel.list_CoreID

它看起来是这样的。

更新

我尝试了 EagleBeak 的解决方案:

<DataGridComboBoxColumn 
            Header="Executing core" Width="100"
            ItemsSource="{Binding ElementName=TasksGrid, Path=DataContext.list_CoreID}" 
            SelectedItemBinding="{Binding ExecutingCore, Mode=TwoWay}"/>
</DataGrid.Columns>

但这会导致错误:

错误:System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。 BindingExpression:Path=DataContext.list_CoreID;数据项=空;目标元素是“DataGridComboBoxColumn”(HashCode=20169503);目标属性是“ItemsSource”(类型“IEnumerable”)

我在博客中发现了一些东西:http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/

“WPF 不知道使用哪个 FrameworkElement 来获取 DataContext,因为该列不属于 DataGrid 的可视树或逻辑树。”

有没有更好的解决方案?

【问题讨论】:

  • 对不起,伙计。我的解决方案没有奏效,突然间我在工作中被围困了。恐怕我不得不退出讨论。但也许这会有所帮助:stackoverflow.com/questions/2890156/…
  • 没问题,谢谢。我现在在后面的代码中做到了,这没有问题。
  • 嘿伙计。刚刚检查了您的问题并查看了您发布的 Levesque 博客中的链接。现在我记得几年前我工作的团队中有人遇到过这个问题。而 BindingProxy 解决方案正是我们当时所做的。比 IMO 背后的代码要好得多。

标签: c# wpf data-binding datagrid combobox


【解决方案1】:

我也遇到过这种问题。按照我在 XAML 中解决它的方式

<wpf:DataGridComboBoxColumn 
 x:Name="cboExecutingcore" 
 Header="Executing core" 
 SelectedItemBinding="{Binding Path =Executingcore, Mode=TwoWay}"/>

然后我从隐藏代码中绑定了 cboExecutingcore。

cboExecutingcore.ItemsSource = list_CoreID;
cboExecutingcore.DisplayMemberPath = "Display Property"

【讨论】:

  • 这正是我所做的,据我所知,唯一的方法是不用摆弄......
  • 我在一个案例中花费了超过一天的时间。但无法从 XAML 绑定它。数据已正确保存,但组合框未显示任何值。
猜你喜欢
  • 2018-12-03
  • 2013-05-31
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多