2010-12-01 4 views
0

私は、(InitializeComponents()を呼び出すだけのデフォルトのコンストラクタを使用して)インスタンス化された後に、別のDataContext、具体的にはViewModelのインスタンスが与えられたクラスの小さなValueConverterを試してみたいと思います。 BindingStaticResourceを使用してDataContextスイッチの後にValueConverterを使用する

DataContextはそれ以来変更されているので、(もうthisではありません)、(NullReferenceExceptionを生み出す)すべてでは動作しません。

InitializeComponentsの前にDataContext = this;を入れてみましたが、変更はありません。 MarkupExtensionギズモを調べるべきでしょうか(in this articleと記載されています)?

また、カスタムValue ConverterのインスタンスをViewModel(現在のDataContext)内に作成しようとしましたが、どちらも役に立ちません。

私はいつでも追加の詳細を提供することができます。前もって感謝します !

私はTextBlock内にContextMenuを表示しようとしています。 ContextMenuには唯一のMenuItemが含まれています。例えば、MenuItemのヘッダーは「設定」にすることができます。前記MenuItemの子(MenuItemsとしても同様に表示される)は、Enumから得られ、従ってMenuItemのItemsSourceである。

すべてがうまく表示されていますが、既定の設定が既に存在するため、子供の1人(例:列挙体のメンバー)をデフォルトごとに選択しようとしています。詳細な背景情報はmy other questionにあります。

編集

... 
<UserControl.Resources> 
    <Helpers:DisplayTypeToDefaultValueConverter x:Key="displayTypeConverter" /> 
</UserControl.Resources> 
... 

<TextBlock x:Name="InstructionLabel" 
      TextWrapping="Wrap" Text="{Binding Path=SelectedNodeText}" 
      Grid.RowSpan="1"> 

    <TextBlock.ContextMenu> 
    <ContextMenu> 
     <MenuItem Header="Settings" Name="SettingsPop" 
       DataContext="{Binding}" 
       ItemsSource="{Binding Source={StaticResource DisplayTypeValues}}" 
       IsCheckable="True" 
       Click="SettingsType_Click"> 

     <MenuItem.ItemContainerStyle> 
      <Style TargetType="MenuItem"> 
      <Setter Property="Header" Value="{Binding}"/> 
      <Setter Property="IsChecked"> 
       <Setter.Value> 
       <Binding Converter="{StaticResource displayTypeConverter}" /> 
       </Setter.Value> 
      </Setter> 
      </Style> 
     </MenuItem.ItemContainerStyle> 

    </ContextMenu> 
    </TextBlock> 

私は今、それは恐ろしいたContextMenuだと気付きました。それが問題ですね。

+1

1. DataContextはStaticResourceバインディングに影響しません。 2.拘束力のあるxamlのラインを提供してください。 –

+0

編集中です。 – Dr1Ku

+0

DisplayTypeValuesはどこですか?定義を見ることができません。また、DisplayTypeToDefaultValueConverterのコードも参考になります。 –

答えて

0

my other related questionで強調表示されているように、より簡単な方法で使用します。
ありがとうございました!

0

ただ、いくつかの考え:

  1. はあなたが<Binding Converter="{StaticResource displayTypeConverter}" />に結合パスを設定逃しませんでしたか?
  2. スローされた例外のStackTraceをチェックしましたか、それともInnerExceptionsなのかを見て、面白いことがあったのかどうか確認しましたか?
+0

私はパスが見つからないと思います。 "IsChecked"にする必要がありますか?例外は、「WPF Data Binding」のデバッグレベルをVS Preferencesより高く設定してもうまくいかなかったMessageBox内に表示されます。 – Dr1Ku

+0

@ Dr1Ku:あなたが正しく理解している場合、例外の詳細を見るには、例外ダイアログボックスの下部にある[詳細を表示...]リンクを押すことができます。私はもう考えていません –

1

ItemContainerStyle内のDataContextは、DisplayTypeValuesコレクションのメンバーです。 UserControlを変更するDataContextの影響を受けるXAMLの唯一のものは、InstructionLabelのテキストです。値が既に親のContextMenuから継承されるので、MenuItemで行っているようにDataContext = "{Binding}"を設定することも冗長です。

あなたの質問やコードから、あなたがDataContextから何を期待しているのか、それとも何をしようとしているのかは明らかではありません。

+0

入力していただきありがとうございます、私はTextBlock内に表示するContextMenu(右クリックで利用可能)を取得しようとしています。 ContextMenuはMenuItemで構成され、(子)MenuItemはその値をEnumから取得します。私が達成しようとしているのは、デフォルトで、(子)MenuItemの1項目がチェックされていることです。 – Dr1Ku

関連する問題