首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGridComboBoxColumn ActionHandler

DataGridComboBoxColumn ActionHandler
EN

Stack Overflow用户
提问于 2012-02-20 23:30:30
回答 1查看 1.1K关注 0票数 2

我有一个包含动态创建的DataGridComboBoxColumn的WPF,它有一个comboBox,我可以更改任何行中的值。该表的另一列中还包含一个复选框,如果我更改此复选框,则每次更改行时它都会调用一个方法,当我更改组合框中的值时,我希望得到相同的结果

我有一个Rum对象列表,出于这个目的,这些对象有三个方法

代码语言:javascript
复制
public int rumStyle { get; set; }
public string rumStyleDesc { get; set; } // string representation  of ruymStyle
public bool rumIsValid { get; set; }

此复选框部件起作用

代码语言:javascript
复制
DataGridTemplateColumn textColumnValid = new DataGridTemplateColumn();
textColumnValid.Header = headerRumIsValid;
FrameworkElementFactory checkBoxFactory = new FrameworkElementFactory(typeof(CheckBox));
Binding rumIsValidBinding = new Binding("rumIsValid");
checkBoxFactory.SetValue(CheckBox.IsCheckedProperty, rumIsValidBinding);
checkBoxFactory.AddHandler(CheckBox.ClickEvent, new RoutedEventHandler(LostFocus));
DataTemplate rumIsdValidTemplate = new DataTemplate();
rumIsdValidTemplate.VisualTree = checkBoxFactory;
textColumnValid.CellTemplate = rumIsdValidTemplate;
_dgData.Columns.Add(textColumnValid);

此部件确实在每行显示一个组合框,但我希望它在更改选择时调用LostFocus (或另一个方法)。

代码语言:javascript
复制
DataGridComboBoxColumn comb = new DataGridComboBoxColumn();
comb.Header = headerRumStyle;
comb.SelectedValueBinding = new Binding("rumStyleDesc");
comb.ItemsSource = _rumStyles.getRumStyleNames();
FrameworkElementFactory comboFactory = new FrameworkElementFactory(typeof(ComboBoxItem));
comboFactory.SetValue(ComboBox.SelectedItemProperty, new Binding("rumStyleDesc"));
comboFactory.AddHandler(ComboBox.SelectionChangedEvent, 
new SelectionChangedEventHandler(comboBox1_SelectionChanged));
DataTemplate comboboxTemplate = new DataTemplate();
comboboxTemplate.VisualTree = buttonFactory;
// How do I do this part 
// comb.CellTemplate = comboboxTemplate;
_dgData.Columns.Add(comb);

第二个但不太重要的问题是,我是否可以在组合框中显示rumStlyeDesc,但以某种方式读回rumstyleId。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-21 23:00:49

最终找到了怎么做。

首先,我将RumStyles列表添加到我的每个rum中,方法是以列表的形式获取样式名称

代码语言:javascript
复制
public RumStyles rumStyles { get; set; }
public List<string> rumStlyesList{ get {return rumStyles.getRumStyleNames();}}

然后,我想出了以下代码来在DataGridTemplateColumn而不是DataGridComboBoxColumn中构建ComboBox

代码语言:javascript
复制
DataGridTemplateColumn changeRumStyleColumn = new DataGridTemplateColumn();
changeRumStyleColumn.Header = headerRumStyle;
FrameworkElementFactory styleComboFactory = 
    new FrameworkElementFactory(typeof(ComboBox));
Binding selectedStyle = new Binding("rumStyleDesc");
styleComboFactory.SetBinding(ComboBox.ItemsSourceProperty,
    new Binding("rumStlyesList"));
styleComboFactory.SetBinding(ComboBox.SelectedItemProperty, new Binding("rumStyleDesc"));
styleComboFactory.SetValue(ComboBox.SelectedItemProperty, selectedStyle);
styleComboFactory.AddHandler(ComboBox.SelectionChangedEvent, 
new SelectionChangedEventHandler(comboBox1_SelectionChanged));
DataTemplate rumStyleTemplate = new DataTemplate();
rumStyleTemplate.VisualTree = styleComboFactory;
changeRumStyleColumn.CellTemplate = rumStyleTemplate;
_dgData.Columns.Add(changeRumStyleColumn);

还有一个问题可以通过更改SelectionChangedEvent来解决,即每当第一次显示行时,都会调用comboBox1_SelectionChanged。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9363667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档