私は簡単な問題を解決する時間を探しています。私は、私のmenuItemsで "SelectedItem"で作業したいと思っていましたが、何時間ものstackoverflowの後、私はそれが不可能であることがわかりました。私は "CommandParameter"について多くを見つけましたが、どのように動作するのか分かりません。 これは私がやりたいことです:私は "background1、background2、..."というメニューを持っています。メニューの背景を選択した場合、その背景を背景として設定したいと思います。WPF selectedItem on menuまたはviewmodelのコマンドパラメータを取得
これは学校プロジェクトなので、MVVMを使用する必要があり、コードビハインドは許可されていません。 ViewModelでCommandパラメータを「使用」するにはどうすればよいですか?
これは私のmainWindow.xamlです:
<Toolbar>
<Menu>
<MenuItem Header="Background" ItemsSource="{Binding Backgrounds}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Name}" Command="{Binding ChangeBackgroundCommand}" CommandParameter="{Binding Name}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
</Toolbar>
これは私のmainWindowViewModelの一部です:
我々はbaseCommandクラスを使用public MainWindowViewModel()
{
//load data
BackgroundDataService bds = new BackgroundDataService();
Backgrounds = bds.GetBackgrounds();
//connect command
WijzigBackgroundCommand = new BaseCommand(WijzigBackground);
}
private void ChangeBackground()
{
//I want here the name of the selected menuItem (by parameter?)
}
}
(私はしたくありませんそのクラスを私が考えるから変更してください):
class BaseCommand : ICommand
{
Action actie;
public BaseCommand(Action Actie)
{
actie = Actie;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
actie.Invoke();
}
}
私はこの:-) stackoverflowの多くを使用するには、私の最初のポスト/質問ですが、私はそれが
:
このようにそれを使用します "wijzig"は "変更"のためのオランダです(私はすべてを翻訳しませんでした) それは正しいですか、問題ではありません、ごめんなさい –
CommandParameter = "{Binding}"はメニューのDataContextを渡しますアイテムをコマンドに追加するだけです(名前を渡すよりも優れています)。問題は、BaseCommandの実装が駄目だということです。つまり、アクション
私はそれを変更しようとします、私はそれが解決したときに返信します、ありがとう –