gpt4 book ai didi

c# - DataGridTemplateColumn 中的 ComboBox 不显示 SelectedItem

转载 作者:行者123 更新时间:2023-11-30 21:05:03 24 4
gpt4 key购买 nike

我想制作包含 ComboBox 的自定义 DataGrid 列。组合框的 ItemSource 绑定(bind)到枚举,组合框的 selecteditem 绑定(bind)到集合元素中选择的枚举值。

这是代码

<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp"
xmlns:System="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:AnimalObservableCollection x:Key="animals">
</local:AnimalObservableCollection>
<ObjectDataProvider x:Key="animalEnum" MethodName="GetValues"
ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:AnimalType"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid>
<DataGrid AutoGenerateColumns="False" Margin="12,12,12,101" Name="dgAnimals" CanUserAddRows="True" CanUserDeleteRows="True" DataContext="{StaticResource animals}" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"></DataGridTextColumn>
<DataGridTemplateColumn Header="Animal type">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource animalEnum}}" SelectedItem="{Binding Path=AnimalType}"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>

代码隐藏

public partial class MainWindow : Window
{
AnimalObservableCollection animals;
public MainWindow()
{
InitializeComponent();
animals = (AnimalObservableCollection)this.FindResource("animals");
animals.Add(new Animal(AnimalType.horse,"Rex"));

}
}

public enum AnimalType { dog, cat, horse };


class AnimalObservableCollection : ObservableCollection<Animal>
{
public AnimalObservableCollection()
: base()
{
}
}

class Animal
{
private AnimalType animalType;
private string name;


public Animal()
{
}
public Animal(AnimalType animalType_, string name_)
{
animalType = animalType_;
name = name_;
}

public AnimalType AnimalType
{
get
{
return animalType;
}
set
{
animalType = value;
}

}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
}

问题是,当组合框失去焦点时,所选项目不会显示在 DataGrid 的单元格中,并且该单元格保持空白。如何使 AnimalType 列中的单元格显示组合框的选定项目?

当我使用 DataGridComboBoxColumn 时,它工作得很好,但我想在将来使用 DataGridTemplateColumn 添加更多功能。

最佳答案

在您的代码中,我只看到 CellEditingTemplate,这意味着您仅在单元​​格处于编辑模式时为该单元格定义了模板,您还需要定义 CellTemplate,它在单元格处于“查看”模式时使用。像这样:

<DataGridTemplateColumn Header="Animal type">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource animalEnum}}"
SelectedItem="{Binding Path=AnimalType}"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=AnimalType}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

关于c# - DataGridTemplateColumn 中的 ComboBox 不显示 SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11916302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com