答えを探して一日中過ごした後、私は敗北を認め、助けを求めなければなりません.
私がする必要があるのは、コンテキスト メニューのヘッダー項目をプロパティにバインドすることだけですが、試したことはすべて失敗しました。
コードビハインドには、フラグに応じて文字列を返す単純なプロパティがあります
下に示された
namespace myNamespace
{
public partial class MainWindow : System.Windows.Window
{
// Removed Init code for Clarity ......
public OptMenuText optMenuText = new OptMenuText();
public class OptMenuText
{
public bool menuState { get; set; }
public string menuHeader
{
get { if (menuState)
return "String One";
else
return "String Two";
}
}
}
XAMl コードには、データを保持する ObservableCollection にバインドされた ListView と、正常に動作している表示用のさまざまな DataTemplates があります。コンテキスト メニューはメイン アプリケーション データ コンテキストの一部ではないため、タグ内で DataContext を指定する必要があることを読みました (この権利があることを願っています)。
ListView 内には、以下に示すようにコンテキスト メニューがあります。
<ListView Name="listView1" Margin="6" SelectionMode="Single"
ItemsSource="{Binding ElementName=This, Path=ConnectCollection}"
ItemTemplateSelector="{StaticResource templateSelector}" IsTextSearchEnabled="False" >
<ListView.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}" >
<MenuItem Header="{Binding menuHeader}" />
<Separator />
<MenuItem Header="Move Item Up" Click="MenuItemUp_Click" />
<MenuItem Header="Move Item Down" Click="MenuItemDown_Click"/>
</ContextMenu>
</ListView.ContextMenu>
</ListView>
私の唯一の問題は、MenuItem ヘッダーを文字列プロパティにバインドできないことです。
報告されたエラーは
System.Windows.Data エラー: 40: BindingExpression パス エラー: 'menuHeader' プロパティが 'object' ''MainWindow' (Name='This')' に見つかりません。BindingExpression:Path=menuHeader; DataItem='MainWindow' (Name='This'); ターゲット要素は 'MenuItem' (Name='') です。ターゲット プロパティは「ヘッダー」(タイプ「オブジェクト」)
誰かが私が間違っているところを教えてください。
サラ