如何在 WPF 的 Datagrid 中设置以编程方式生成的 ComboBox 的启用属性?
Posted
技术标签:
【中文标题】如何在 WPF 的 Datagrid 中设置以编程方式生成的 ComboBox 的启用属性?【英文标题】:How to set the enable property of a programmatically generated ComboBox in a Datagrid in WPF ? 【发布时间】:2018-01-30 16:36:25 【问题描述】:在 WPF 中,我有一个有 2 列的 Datagrid。 第一个是字符串,第二个是组合框。 我的目标是在组合框的属性 IsEnable 每次包含第 1 列的字符串时设置为 false。
我的数据源来自数据视图(其他一些列需要动态生成)。
我想解决方案必须围绕“绑定”值,但是...我不知道在里面放什么...有什么想法吗?
DataView DG = FunctionCreatingADataView();
Datagrid1.ItemsSource = DG;
Datagrid1.AutoGenerateColumns = true;
Datagrid1.Items.Refresh();
DataGridTemplateColumn dgTemplateColumn = new DataGridTemplateColumn();
dgTemplateColumn.Header = "Attachment";
var newCombobox = new FrameworkElementFactory(typeof(ComboBox));
newCombobox.SetValue(ComboBox.NameProperty, "myCBB");
Binding enableBinding = new Binding();
enableBinding.Source = "HasAttachment";// A column in my DG
enableBinding.Mode = BindingMode.OneWay;
newCombobox.SetValue(ComboBox.IsEnabledProperty, enableBinding);
List<string> listUnitAlreadyAttached = new List<string>();
// Load list with some code
enableBinding.Source = listUnitAlreadyAttached;
newCombobox.SetBinding(ComboBox.ItemsSourceProperty, enableBinding);
var dataTplT = new DataTemplate();
dataTplT.VisualTree = newCombobox;
dgTemplateColumn.CellTemplate = dataTplT;
Binding bindingIsEnable = new Binding();
Datagrid1.Columns[1] = dgTemplateColumn;
【问题讨论】:
你已经写了你的条件:我的目标是在组合框的属性 IsEnable 每次包含第 1 列的字符串时设置为 false。 写一个@987654322 @ 并将此转换器绑定到列中的字符串和组合框值。另一个提示:为什么要在后面的代码中这样做?在 xaml 中进行操作更容易阅读。 感谢您添加 Mighty。我选择以编程方式编写此内容,因为我还有其他动态创建的列(可能有 2 到数千个......),在 XAML 中看起来很复杂。 欢迎您。如果您在实施过程中遇到困难,我可以为您提供帮助。 我会看一下multiValueConverter,但假设我对xaml和wpf不熟悉,希望不会太复杂。 好吧,我放弃了,欢迎您的实施 :) 实际上,我不明白为什么 MultiValueConverter :根据组合框的所有项目的事实,只有字符串会启用或禁用组合框到处都是一样的。其他问题,如何指示“第一行第一列的字符串将更新第一行的组合框,而不是第二行?”明白了吗 ?迷路了…… 【参考方案1】:您应该将Binding
的Path
设置为HasAttachment
:
newCombobox.SetValue(ComboBox.IsEnabledProperty, new Binding("HasAttachment"));
您可能希望使用转换器将值从true
转换为false
:
newCombobox.SetValue(ComboBox.IsEnabledProperty, new Binding("HasAttachment") Converter = new InverseBooleanConverter() );
How to bind inverse boolean properties in WPF?
【讨论】:
你应该加一个IValueConverter
(bool到相反的bool)因为他说如果HasAttachment设置为true,Combobox必须是Disable,如果它HasAttachment设置为false,ComboBox必须启用以上是关于如何在 WPF 的 Datagrid 中设置以编程方式生成的 ComboBox 的启用属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 MVVM 应用程序在 WPF 中以编程方式设置 DataGrid 的选定项?
WPF DataGrid - 从 DataGrid ItemsSource 对象的集合值中设置唯一的每行(对象)组合框值