【发布时间】: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 :根据组合框的所有项目的事实,只有字符串会启用或禁用组合框到处都是一样的。其他问题,如何指示“第一行第一列的字符串将更新第一行的组合框,而不是第二行?”明白了吗 ?迷路了……
标签: c# wpf programmatically-created datagridcomboboxcolumn