2010-10-23 64 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