2013-04-30 65 views
0

我想绑定到DataGrid的DataGridComboBoxColumn T的ObservableCollection。
数据网格的定义是:绑定DataGridComboBoxColumn

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Model, IsAsync=True}"> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Column Entry" IsReadOnly="True" Binding="{Binding ColumnName}"/> 
     <DataGridComboBoxColumn Header="Road Type" ItemsSource="{Binding RoadTypes}"/> 
    </DataGrid.Columns> 

</DataGrid> 

这是视图模型和模型

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     var viewModel = new ViewModel(); 
     DataContext = viewModel; 
    } 
} 

public class ViewModel : ViewModelBase 
{ 
    private ObservableCollection<Model> _model; 

    public ViewModel() 
    { 
     var list = new List<Model>(); 
     var roadTypes = new ObservableCollection<RoadType> 
          { 
           new RoadType 
            { 
             Code = 1, 
             Id = 1, 
             Name = "Name1" 
            }, 
           new RoadType 
            { 
             Code = 1, 
             Id = 1, 
             Name = "Name1" 
            } 
          }; 

     Model = new ObservableCollection<Model> 
        { 
         new Model 
          { 
           ColumnName = "Col1", 
           RoadTypes = roadTypes 
          }, 
         new Model 
          { 
           ColumnName = "Col1", 
           RoadTypes = roadTypes 
          } 
        }; 
    } 

    public ObservableCollection<Model> Model 
    { 
     get { return _model; } 
     set 
     { 
      _model = value; 
      RaisePropertyChanged(() => Model); 
     } 
    } 
} 

public class RoadType 
{ 
    public int Id { get; set; } 
    public int Code { get; set; } 

    public string Name { get; set; } 
} 

public class Model : ObservableObject 
{ 
    private ObservableCollection<RoadType> _roadTypes; 
    public string ColumnName { get; set; } 

    public ObservableCollection<RoadType> RoadTypes 
    { 
     get { return _roadTypes; } 
     set 
     { 
      _roadTypes = value; 
      RaisePropertyChanged(() => RoadTypes); 
     } 
    } 
} 

数据网格显示文本列,以及,但它不显示组合框的值。
有什么问题?

回答

6

由于RoadTypes不是一个简单的字符串列表,您需要告诉组合框它需要显示哪些属性。尝试添加

DisplayMemberPath="Name" 

你的组合框declartion

-

更新:

好吧,这是一个已知的 “功能” 与WPF DataGrid中。问题是DataGridComboBox没有DataGrid的DataContext。我修改绑定的组合框,看起来像这样:

<DataGridComboBoxColumn DisplayMemberPath="Name"> 
    <DataGridComboBoxColumn.ElementStyle> 
      <Style> 
       <Setter Property="ComboBox.ItemsSource" Value="{Binding Path=RoadTypes}" /> 
      </Style> 
     </DataGridComboBoxColumn.ElementStyle> 
     <DataGridComboBoxColumn.EditingElementStyle> 
       <Style> 
        <Setter Property="ComboBox.ItemsSource" Value="{Binding Path=RoadTypes}" /> 
       </Style> 
     </DataGridComboBoxColumn.EditingElementStyle> 
    </DataGridComboBoxColumn> 

我修改,你在你的下载链接提供的代码,当我打开组合框下拉菜单中显示的组合框项目。

检查出一些这些链接进一步澄清:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b4b13a72-47f9-452f-85c6-6c4b5b606df5/

How to bind collection to WPF:DataGridComboBoxColumn

Excedrin headache #3.5.40128.1: Using combo boxes with the WPF DataGrid

是什么导致我看看所有这些网站的期待在输出窗口注意到错误消息System.Windows.Data错误:2:找不到管理FrameworkElement或FrameworkContentElement的targ et元素。消息

+0

试过但它没有工作。 – Unforgiven 2013-04-30 18:02:11

相关问题