0

答えを探して一日中過ごした後、私は敗北を認め、助けを求めなければなりません.

私がする必要があるのは、コンテキスト メニューのヘッダー項目をプロパティにバインドすることだけですが、試したことはすべて失敗しました。

コードビハインドには、フラグに応じて文字列を返す単純なプロパティがあります

下に示された

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='') です。ターゲット プロパティは「ヘッダー」(タイプ「オブジェクト」)

誰かが私が間違っているところを教えてください。

サラ

4

1 に答える 1

1

質問にネストされたクラスが表示されませんでした。問題は、ネストされたクラスにプロパティがあるため、バインドが失敗することです。パブリック変数ではなく、プロパティとしてoptMenuTextを公開する必要があります。以下のコードは機能します。

 public partial class MainWindow : System.Windows.Window {
     public MainWindow() {
        optMenuText = new OptMenuText();
        InitializeComponent();
     }
     public OptMenuText optMenuText { get; set; }
 }

そして使用する

<MenuItem Header="{Binding optMenuText.menuHeader}" />

あなたのバインディングのために

于 2013-05-24T03:57:05.523 に答える