1

MenuItem動的にバインドしようとしています。

私が持っているpublic List<string> LastOpenedFiles { get; set; }のは私のデータソースです。私が実行しようとする私のコマンドはpublic void DoLogFileWork(string e)

<MenuItem Header="_Recent..."
          ItemsSource="{Binding LastOpenedFiles}">
  <MenuItem.ItemContainerStyle>
    <Style TargetType="MenuItem">
      <Setter Property="Header"
              Value="What should be here"></Setter>
      <Setter Property="Command"
              Value="What should be here" />
      <Setter Property="CommandParameter"
              Value="What should be here" />
    </Style>
  </MenuItem.ItemContainerStyle>
</MenuItem>

各エントリLastOpenedFilesをクリックして、 DoLogFileWorkクリックしたエントリ値で機能するようにします。

助けてくれてありがとう。

4

1 に答える 1

1
<Setter Property="Header" Value="What should be here"></Setter>

何もありません。これは既に上で_Recent...

<Setter Property="Command" Value="What should be here"/>
<Setter Property="CommandParameter" Value="What should be here"/>

MVVM アプローチを使用していますか? その場合ICommand、ウィンドウ/コントロールがバインドされている ViewModel で公開する必要RelayCommandがあります

これは、VM でセットアップするようなものです。

    private RelayCommand _DoLogFileWorkCommand;
    public RelayCommand DoLogFileWorkCommand {
        get {
            if (null == _DoLogFileWorkCommand) {
                _DoLogFileWorkCommand = new RelayCommand(
                    (param) => true,
                    (param) => { MessageBox.Show(param.ToString()); }
                );
            }
            return _DoLogFileWorkCommand;
        }
    }

次に、Xaml で:

<Setter Property="Command" Value="{Binding ElementName=wnLastOpenedFiles, Path=DataContext.DoLogFileWorkCommand}" />
<Setter Property="CommandParameter" Value="{Binding}"/>

したがって、ここでは、CommandMenuItem上記DoLogFileWorkCommandで宣言CommandParameterされたものにバインドし、MenuItem がバインドされている List 内の文字列にバインドしています。

于 2013-04-21T18:40:21.303 に答える