我有以下课程:
public class Zone {
public int ID {get;set;}
public string Name {get;set;}
public string Formatted {get;set;}
}
使用以下DataGridComboBoxColumn
:
<DataGrid Name="dg" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridComboBoxColumn SelectedValueBinding="{Binding ZoneID}" DisplayMemberPath="Formatted" SelectedValuePath="ZoneID" />
</DataGrid.Columns>
</DataGrid>
我正在使用List<Zone>
作为ItemsSource
的{{1}}:
DataGridComboBoxColumn
设置((DataGridComboBoxColumn)dg.Columns[0]).ItemsSource = new List<Zone> {
new Zone {ID=0,Name="Zone0",Formatted="Zone0 - Formatted"},
new Zone {ID=1,Name="Zone1",Formatted="Zone1 - Formatted"},
new Zone {ID=2,Name="Zone2",Formatted="Zone2 - Formatted"},
new Zone {ID=3,Name="Zone3",Formatted="Zone3 - Formatted"},
new Zone {ID=4,Name="Zone4",Formatted="Zone4 - Formatted"}
};
有两个影响:
DisplayMemberPath="Formatted"
属性Formatted
生成下拉项。
如何让单元格内容使用Formatted
属性,而下拉列表使用Name
属性?
答案 0 :(得分:1)
我找到了另一种解决方案,但没有使用DataTemplateSelector覆盖整个模板:
public class ComboBoxTemplateSelector : DataTemplateSelector
{
public DataTemplate BoxTemplate { get; set; }
public DataTemplate ListTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var test = container;
while (test != null)
{
if (test is ComboBox)
{
return BoxTemplate;
}
if (test is ComboBoxItem)
{
return ListTemplate;
}
test = VisualTreeHelper.GetParent(test);
}
return null;
}
}
XAML:
<DataGrid AutoGenerateColumns="False">
<DataGrid.Resources>
<DataTemplate x:Key="Box">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
<DataTemplate x:Key="List">
<TextBlock Text="{Binding Formatted}" />
</DataTemplate>
<Selector:ComboBoxTemplateSelector x:Key="Selector"
BoxTemplate="{StaticResource Box}" ListTemplate="{StaticResource List}" />
<DataTemplate x:Key="CmbTemplate">
<ComboBox SelectedItem="{Binding Zone}"
ItemsSource="{Binding Values, RelativeSource={RelativeSource AncestorType=Window}}"
ItemTemplateSelector="{StaticResource Selector}" />
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource CmbTemplate}">
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
答案 1 :(得分:0)
如果DatagridTemplateColumn也可以,您可以执行以下操作:
从http://msdn.microsoft.com/de-de/library/vstudio/ms752094%28v=vs.100%29.aspx复制原始模板 进入资源
替换行<ContentPresenter />
(模板底部的第6行)与<Label Content="{Binding Formatted}" />
将DatagridComboBoxColumn更改为包含组合框的DatagridTemplateColumn