2011-11-10 51 views
1

我建造這樣的RibbonGroupBox在C#文件:如何在C#代碼中動態設置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); 
    } 
} 

我還具有一個包含字體,字號,DefaultFont和DefaultFontSize性能視圖模型(TextControlVM)。

當我現在在這樣的另一個模塊利用這一點,在DataContext在上面的例子中爲空:

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

當我建立與XAML代碼一切正常的RibbonGroupBox,所以我想要做的XAML自動做。我怎樣才能做到這一點?

背景:我想在幾個模塊中使用RibbonGroupBox。這就是爲什麼我用C#代碼構建它,以便我可以動態訪問它。 DataContext將改變調用的依賴。

回答

0

DataContext在暗示一個自動綁定,所以你基本上是結合RibbonTabItem.DataContext.DataContext.TextControl,不存在

綁定到RibbonTabItem.DataContext.TextControl,只需將多餘的DataContext出結合

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

的不幸的是,這並沒有奏效。仍然DataContext爲null。 – Hauke

+0

@Hauke我會建議使用像Snoop這樣的工具,並確保你的'RibbonTabItem'包含一個'DataContext',它具有一個名爲'TextControl'的屬性並且是'TextControlVM'類型。 Snoop網站是http://snoopwpf.codeplex.com/ – Rachel

+0

Thx。我會嘗試。 – Hauke

相關問題