2010-10-23 66 views
0

我在我的WPF 4基于桌面的应用程序中有一个DataGrid与数据。 当用户在行上单击两次时,DataGrid切换到编辑模式,其中用户可以更改单元格的值。现在我想让特定的单元格用户只能从组合框中选择值,例如性别 - 男性/女性,而不是键入其他东西。在Datagrid行编辑上显示组合框,WPF

如何在DataGrid的编辑模式下显示组合框?

谢谢。

回答

1

许多实际上是不同的方式,

绑定到一个枚举

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的房产,像这样

从静态列表在ComboBox

UPDATE个

<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> 
+0

我已经试过你最后的方式,但实际上没有进行绑定,我看到一个干净的组合框。我的窗口被称为WinWorkers。我已经在WinWorkers.cs中创建了一个值列表,添加了getter和setter,正如你所提到的。在WinWorkers.xaml中,我以不同的方式放置DataGridComboBoxColumn和setuped ItemSource,但它不起作用。例如ItemsSource =“{Binding Path = ListName}”不起作用。如何连接到列表«genderList»,在同一个班级创建?谢谢。 – 2010-10-24 00:13:25

+0

用更多细节更新了第二个例子 – 2010-10-24 08:39:36