0
我在我的WPF 4基于桌面的应用程序中有一个DataGrid与数据。 当用户在行上单击两次时,DataGrid切换到编辑模式,其中用户可以更改单元格的值。现在我想让特定的单元格用户只能从组合框中选择值,例如性别 - 男性/女性,而不是键入其他东西。在Datagrid行编辑上显示组合框,WPF
如何在DataGrid的编辑模式下显示组合框?
谢谢。
我在我的WPF 4基于桌面的应用程序中有一个DataGrid与数据。 当用户在行上单击两次时,DataGrid切换到编辑模式,其中用户可以更改单元格的值。现在我想让特定的单元格用户只能从组合框中选择值,例如性别 - 男性/女性,而不是键入其他东西。在Datagrid行编辑上显示组合框,WPF
如何在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>
然后,我们可以绑定一个DataGridComboBoxColumn到一个叫做Choise的房产,像这样
从静态列表在ComboBoxUPDATE个
<DataGrid Name="c_dataGrid" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridComboBoxColumn Header="Choise" SelectedItemBinding="{Binding Choise}" ItemsSource="{Binding Source={StaticResource ChoiseEnumDataProvider}}"/> </DataGrid.Columns> </DataGrid>
仅显示值
增加了更多的细节
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>
我已经试过你最后的方式,但实际上没有进行绑定,我看到一个干净的组合框。我的窗口被称为WinWorkers。我已经在WinWorkers.cs中创建了一个值列表,添加了getter和setter,正如你所提到的。在WinWorkers.xaml中,我以不同的方式放置DataGridComboBoxColumn和setuped ItemSource,但它不起作用。例如ItemsSource =“{Binding Path = ListName}”不起作用。如何连接到列表«genderList»,在同一个班级创建?谢谢。 – 2010-10-24 00:13:25
用更多细节更新了第二个例子 – 2010-10-24 08:39:36