2016-10-28 5 views
1

私は他のリストから.distinctが設定されたリストを持っています。そして、これらのアイテムを取得し、コンボボックスを作成するためのチェックボックスを作成します。Wpf C#Change checkbox comboboxitem color + disable

いくつかのフィルタを実行した後、2番目のリストでこれらのコンボボックスの項目を検索する必要があります。存在しない場合は、項目を無効にして背景色を設定する必要があります。

// List to populate the combobox 
public List<System.Windows.Controls.CheckBox> ListaCmbMnMe { get; set; } 

//... 

ListaCmbMnMe = new List<System.Windows.Controls.CheckBox>(); 

// ListaPendencia is populated from database MnMe is a column from it 
foreach (string item in ListaPendencia.Select(p => p.MnMe).Distinct()) 
{ 
    checkBox = new System.Windows.Controls.CheckBox(); 
    checkBox.Content = item; 

    ListaCmbMnMe.Add(checkBox); 
} 

//... 
// Just trying to change the properties to find out if it works 
foreach (System.Windows.Controls.CheckBox item in ListaCmbMnMe) 
{ 
    item.IsEnabled = false; 
    item.Background = new SolidColorBrush(Color.FromRgb(102, 153, 255)); 
} 

cmbMnMe.ItemsSource = ListaCmbMnMe; 

私はxamlに特別なことは何もしていません。

色が変更されず、無効になっていません。

+1

質問に表示されているように、ループの後にItemsSourceに割り当てていますか? –

+0

また、ループにブレークポイントを置くと、デバッガのブレークポイントにヒットしますか? –

+1

xamlを表示します。私はあなたがビジュアルツリーにCheckBoxesを追加していないと推測しています。 DataSourceコレクションであり、UI要素コレクションではないと思われるItemsSourceにコレクションを追加しました。 – loopedcode

答えて

1

xamlの "IsEnabled"プロパティを単にバインドするのを忘れてしまっただけです。

1

cmbMnMe.ItemsSource = ListaCmbMnMe;に追加する代わりに、データソース用です。すなわちdatacontext; Itemsに追加してください。別のリストのチェックボックスのコレクションを持つ必要はありません。

// ListaPendencia is populated from database MnMe is a column from it 
foreach (string item in ListaPendencia.Select(p => p.MnMe).Distinct()) 
{ 
    checkBox = new System.Windows.Controls.CheckBox(); 
    checkBox.Content = item; 

    checkBox.IsEnabled = false; 
    checkBox.Background = new SolidColorBrush(Color.FromRgb(102, 153, 255)); 

    cmbMnMe.Items.Add(checkBox);  
} 

理想的には、チェックボックスと必要なバインディングを持つDataTemplateを使用してデータバインディングを使用する必要があります。 MVVMパターンを使用します。

+0

xamlの "IsEnabled"プロパティをバインドしていなかったことを覚えていますが、あなたのコメントは役に立ちました。 – User

関連する問題