WPF动态生成的DataGrid(Devexpress dxg:GridControl)

时间:2014-03-26 15:02:18

标签: c# wpf xaml datagrid devexpress-wpf

我有一个要求,我必须使用网格上的可编辑复选框控件(在devexpress gridcontrol上)显示一些只读数据以供用户输入,但这些列应该是动态生成的。任何更改完成网格(复选框)都要保存在后端。

为此,我提到了这篇文章:

动态数据网格http://paulstovell.com/blog/dynamic-datagrid

如果我使用Visual Studio(2010)WPF Datagrid,代码工作正常。但是当我使用devexpress gridcontrol而不是gridcontrol(checbox列)时,默认情况下不可编辑。为了解决这个问题,我使用了datatemplate但是我正面临着另一个问题是,尽管是模式" TwoWay"。

,但这些都没有在代码背后更新

任何帮助将不胜感激。

环境:VS 2010,WPF,Devexpress控制12.1

devexpress gridcontrol的代码段更改如下:

(实施INotifyPropertyChanged)

private ObservableCollection<Record> records;

public ObservableCollection<Record> Records
        {
            get
            {
                return records;
            }
            set
            {
                records = value;
                OnPropertyChanged(() => Records);
            }

        }

构造函数部分:

records = new ObservableCollection<Record>();

Records.Add(new Record(new Property("FirstName", "Paul"), new Property("LastName", "Stovell"), new Property("IsEnabled", true)));
Records.Add(new Record(new Property("FirstName", "Tony"), new Property("LastName", "Black"), new Property("IsEnabled", false)));

   var columns = Records.First()
    .Properties
    .Select((x, i) => new { Name = x.Name, Index = i })
    .ToArray();

            foreach (var column in columns)
            {
                var x = string.Format("Properties[{0}].Value", column.Index);
                var binding = new Binding(string.Format("Properties[{0}].Value", column.Index));


                {
                    dataGrid.Columns.Add(new GridColumn()
                        {
                            Header = column.Name,

                            DisplayMemberBinding = binding,
                            AllowEditing = DefaultBoolean.True,
                           CellTemplate = (DataTemplate)Application.Current.FindResource("AttributeDisplayTemplate")
                        });
                }



<DataTemplate x:Key="AttributeDisplayTemplate">
        <CheckBox MinWidth="70"  IsEnabled="True" IsChecked="{Binding Path=Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"   />
    </DataTemplate>

Xaml Part

  <dxg:GridControl x:Name="dataGrid"  ItemsSource="{Binding Records}" 
 AutoPopulateColumns="False" IsEnabled="True"    Width="650">

            <dxg:GridControl.View>
                <dxg:TableView BestFitArea="All" AllowBestFit="True" ShowGroupPanel="False" NavigationStyle="Cell"  
                                    >
                </dxg:TableView>
            </dxg:GridControl.View>
        </dxg:GridControl>

0 个答案:

没有答案