【发布时间】:2017-03-21 00:44:20
【问题描述】:
我目前正在努力使用 C# WPF 中的 DataGridComboBoxColumn。
我有类 ToolModel
class ToolModel
{
public long Id { get; set; }
public string Number { get; set; }
public string Name { get; set; }
public string Coating { get; set; }
public bool Thread { get; set; }
public string Kind { get; set; }
public ToolTypeModel Type { get; set; }
}
和类 ToolTypeModel
public class ToolTypeModel
{
public long Id { get; set; }
public string Name { get; set; }
}
数据存储到数据库中并加载到我的 ViewModel 中
class ToolsViewModel
{
public ObservableCollection<ToolModel> Tools { get; set; }
public ObservableCollection<ToolTypeModel> ToolTypes { get; set; }
public ToolsViewModel()
{
Tools = new ObservableCollection<ToolModel>(ToolModel.GetTools());
ToolTypes = new ObservableCollection<ToolTypeModel>(ToolTypeModel.GetToolTypes());
}
}
我想在 DataGrid 中显示数据并尝试添加 DataGridComboBoxColumn 来为对应的 Tool 选择 ToolType。因此我添加了以下 xaml 定义(这已经是一种解决方法 - 但我能够让它几乎工作的唯一方法):
<DataGrid x:Name="ToolsDataGrid" ItemsSource="{Binding Tools}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Nummer" Binding="{Binding Number}" />
<DataGridComboBoxColumn
Header="Typ"
SelectedValueBinding="{Binding Type, Mode=TwoWay}"
SelectedValuePath="Id"
DisplayMemberPath="Name">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.ToolTypes, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.ToolTypes, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
它显示了 ToolTypes 的所有元素但不是我的工具引用的所选元素。
任何想法如何将 ToolTypes 查找到 ComboBoxColumn 并将引用的 Type 显示为选定项?
提前致谢。
【问题讨论】: