我有一个要求,我必须使用网格上的可编辑复选框控件(在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>