2011-11-10 32 views
1

は、私はC#ファイルにこのようなRibbonGroupBoxを建て:C#-codeでDataContextをどのように動的に設定できますか?

public class TextControl : RibbonGroupBox 
{ 
    public TextControl() 
    { 
     const double widthOfComboBoxes = 150; 

     Binding fontsBinding = new Binding(); 
     fontsBinding.Source = (TextControlVM)DataContext; 
     fontsBinding.Path = new System.Windows.PropertyPath("Fonts"); 
     fontsBinding.Mode = BindingMode.TwoWay; 

     Binding fontSizeBinding = new Binding(); 
     fontSizeBinding.Source = (TextControlVM)DataContext; 
     fontSizeBinding.Path = new System.Windows.PropertyPath("FontSize"); 
     fontSizeBinding.Mode = BindingMode.TwoWay; 

     /* Combobox for the fonts (Arial, etc.) */ 
     Fluent.ComboBox fontCombo = new Fluent.ComboBox(); 
     fontCombo.SetBinding(Fluent.ComboBox.ItemsSourceProperty, fontsBinding); 
     fontCombo.SelectedItem = ((TextControlVM)DataContext).DefaultFont; 
     fontCombo.Width = widthOfComboBoxes; 
     this.AddChild(fontCombo); 

     /* Combobox for the fontsizes */ 
     Fluent.ComboBox fontSizeCombo = new Fluent.ComboBox(); 
     fontSizeCombo.SetBinding(Fluent.ComboBox.ItemsSourceProperty, fontSizeBinding); 
     fontSizeCombo.SelectedItem = ((TextControlVM)DataContext).DefaultFontSize; 
     fontSizeCombo.Width = widthOfComboBoxes; 
     this.AddChild(fontSizeCombo); 
    } 
} 

私はさらにフォント、のFontSize、DefaultFontとDefaultFontSizeのプロパティが含まれているのviewmodel(TextControlVM)を持っています。

私は今、このような別のモジュールでこれを使用し、上記の例でのDataContextがnull:

<Fluent:RibbonTabItem Header="Export"> 
    <TextControl DataContext="{Binding DataContext.TextControl}"/> 
</Fluent:RibbonTabItem> 

私はXAMLコードでRibbonGroupBoxをビルドするときにすべてが正常に動作しますので、私は何XAMLをしたいです自動的に行います。どうやってやるの?

背景:いくつかのモジュールでRibbonGroupBoxを使用したいと思います。だからこそ私はC#コードでビルドするので、私はそれを動的にアクセスすることができます。 DataContextは、呼び出しに依存して変更されます。

答えて

0

あなたは、本質的に単に結合

<Fluent:RibbonTabItem Header="Export"> 
    <TextControl DataContext="{Binding TextControl}"/> 
</Fluent:RibbonTabItem> 
+0

のうち、余分なDataContextを残し、RibbonTabItem.DataContext.TextControlにバインドするには

を存在しない、RibbonTabItem.DataContext.DataContext.TextControlに結合されているのでDataContextは、自動的に結合に暗示されて残念ながらそれはうまくいきませんでした。それでもDataContextはnullです。 – Hauke

+0

@ Hauke私はSnoopのようなツールを使って 'RibbonTabItem'に' TextControl'という名前のプロパティを持ち、 'TextControlVM'タイプの' DataContext'が含まれていることを確認することをお勧めします。スヌープのウェブサイトはhttp://snoopwpf.codeplex.com/ – Rachel

+0

Thxです。私はそれを試みます。 – Hauke

関連する問題