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は、呼び出しに依存して変更されます。
のうち、余分な
DataContext
を残し、RibbonTabItem.DataContext.TextControl
にバインドするにはを存在しない、
RibbonTabItem.DataContext.DataContext.TextControl
に結合されているのでDataContext
は、自動的に結合に暗示されて残念ながらそれはうまくいきませんでした。それでもDataContextはnullです。 – Hauke@ Hauke私はSnoopのようなツールを使って 'RibbonTabItem'に' TextControl'という名前のプロパティを持ち、 'TextControlVM'タイプの' DataContext'が含まれていることを確認することをお勧めします。スヌープのウェブサイトはhttp://snoopwpf.codeplex.com/ – Rachel
Thxです。私はそれを試みます。 – Hauke