2017-08-22 7 views
0

WPFでは、私は2列を持つDatagridを持っています。 最初の文字列は文字列、2番目の文字列はcomboBoxです。 私の目標は、カラム#1の文字列が含まれるたびに、コンボボックスのIsEnableプロパティをfalseに設定することです。プログラムで生成されたComboBoxのenableプロパティをWPFのDatagridに設定する方法はありますか?

私のデータソースはデータビューから来ています(他のいくつかの列は動的に生成する必要があります)。

私は解決策が "バインディング"値の周りになければならないと思いますが...私は何を内部に置くべきか分かりません。

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; 
+0

あなたは既にあなたの条件を書いています:**私の目標は、コンボボックスのIsEnableプロパティにカラム#1の文字列が含まれるたびにfalseに設定することです。** 'IMultiValueConverter'を書き、このコンバーターを列とコンボボックスの値。 別のヒント:なぜこれをコードの背後に置いていますか? xamlで行う方が簡単で読みやすくなります。 –

+0

あなたのMightyを追加してくれてありがとう。私は動的に作成された他の列を持っているので(2から数千に及ぶ可能性があります)、XAMLでは複雑に見えるので、プログラムでこれを記述することにしました。 – PetersLast

+0

ようこそ。実装に苦労したら、私はあなたを助けることができます。 –

答えて

1

あなたはHasAttachmentBindingPathを設定する必要があります。

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?

+0

Hasalが「true」に設定されている場合、Comboboxが無効になっている必要があり、HasAttachmentの場合には、IValueConverter(boolを反対のブールに追加)がfalseに設定されている場合、ComboBoxが有効になっている必要があります。* –

+1

@MightyBadaboom:回答が編集されました。 – mm8

+0

マイティとmm8に感謝します! – PetersLast

関連する問題