C# 在数据网格行编辑上显示组合框,WPF
我有一个C# 在数据网格行编辑上显示组合框,WPF,c#,wpf,datagrid,combobox,C#,Wpf,Datagrid,Combobox,我有一个DataGrid,其中包含基于WPF 4桌面的应用程序中的数据。 当用户在行DataGrid上单击两次时,将切换到编辑模式,用户可以在该模式中更改单元格的值。现在我希望在特定的单元格上,用户只能从组合框中选择值,例如性别-男性/女性,而不能键入其他内容 如何在编辑模式下显示组合框?实际上有很多不同的方式 绑定到枚举 public enum ChoiseEnum { Yes, No, Maybe } 首先,你需要一个ObjectDataProvider xmlns
DataGrid
,其中包含基于WPF 4桌面的应用程序中的数据。
当用户在行DataGrid
上单击两次时,将切换到编辑模式,用户可以在该模式中更改单元格的值。现在我希望在特定的单元格上,用户只能从组合框中选择值,例如性别-男性/女性,而不能键入其他内容
如何在编辑模式下显示组合框?实际上有很多不同的方式 绑定到枚举
public enum ChoiseEnum
{
Yes,
No,
Maybe
}
首先,你需要一个ObjectDataProvider
xmlns:sys="clr-namespace:System;assembly=mscorlib"
<ObjectDataProvider MethodName="GetValues"
ObjectType="{x:Type sys:Enum}"
x:Key="ChoiseEnumDataProvider">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:ChoiseEnum" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
xmlns:sys=“clr命名空间:系统;程序集=mscorlib”
然后我们可以像这样将DataGridComboxColumn绑定到名为Choise的属性
<DataGrid Name="c_dataGrid"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Choise"
SelectedItemBinding="{Binding Choise}"
ItemsSource="{Binding Source={StaticResource ChoiseEnumDataProvider}}"/>
</DataGrid.Columns>
</DataGrid>
仅在组合框中显示静态列表中的值
public enum ChoiseEnum
{
Yes,
No,
Maybe
}
更新添加了更多细节
namespace ComboBoxDataGrid
{
public class TestClass
{
static TestClass()
{
ChoiseData = new List<string>();
ChoiseData.Add("Yes");
ChoiseData.Add("No");
ChoiseData.Add("Maybe");
}
public static List<string> ChoiseData
{
get;
set;
}
public TestClass()
{
SelectedChoise = string.Empty;
}
public TestClass(string selectedChoise)
{
SelectedChoise = selectedChoise;
}
public string SelectedChoise
{
get;
set;
}
}
}
public partial class WinWorkers: Window
{
public WinWorkers()
{
InitializeComponent();
TestClasses = new ObservableCollection<TestClass>();
TestClasses.Add(new TestClass("Yes1"));
TestClasses.Add(new TestClass("No"));
TestClasses.Add(new TestClass("Maybe"));
c_dataGrid.ItemsSource = TestClasses;
}
public ObservableCollection<TestClass> TestClasses
{
get;
set;
}
}
<Window x:Class="ComboBoxDataGrid.WinWorkers"
xmlns:local="clr-namespace:ComboBoxDataGrid"
...>
<Window.Resources>
<local:TestClass x:Key="TestClass" />
</Window.Resources>
<Grid>
<DataGrid Name="c_dataGrid"
AutoGenerateColumns="False"
RowHeaderWidth="100">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Choise_StaticList"
SelectedValueBinding="{Binding SelectedChoise}"
ItemsSource="{Binding Source={StaticResource TestClass}, Path=ChoiseData}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
名称空间ComboxDataGrid
{
公共类TestClass
{
静态测试类()
{
choia=新列表();
a.添加(“是”);
a.添加(“否”);
添加(“可能”);
}
公共静态列表
{
得到;
设置
}
公共测试类()
{
SelectedChoise=string.Empty;
}
公共测试类(字符串selectedChoise)
{
SelectedChoise=SelectedChoise;
}
公共字符串选择选项
{
得到;
设置
}
}
}
公共部分类WinWorkers:窗口
{
公职人员()
{
初始化组件();
TestClasses=新的ObservableCollection();
添加(新的TestClass(“Yes1”);
添加(新的TestClass(“No”);
添加(新的TestClass(“Maybe”);
c_dataGrid.ItemsSource=TestClasses;
}
公共ObservableCollection测试类
{
得到;
设置
}
}
我已经尝试了您的最后一种方法,但实际上没有执行绑定,我看到一个干净的组合框。我的窗口叫做WinWorkers。我在WinWorkers.cs中创建了一个值列表,添加了getter和setter,如您所述。在WinWorkers.xaml中,我以不同的方式放置了DataGridComboxColumn和SetuptedItemSource,但它不起作用。e、 g.ItemsSource=“{Binding Path=ListName}”不起作用。如何连接到在同一类中创建的列表«genderList»?谢谢。用更多细节更新了第二个示例