我在XAML(使用WPF-MDI)定義3菜單項:綁定檢查菜單項視圖模型命令
<MenuItem Header="_Generic" Name="Generic" ToolTip="Generic Visual Studio designer theme"
Command="{Binding Path=SelectGenericTheme}"/>
<MenuItem Header="_Luna" Name="Luna" ToolTip="Blue Windows XP theme"
Command="{Binding Path=SelectLunaTheme}"/>
<MenuItem Header="_Aero" Name="Aero" ToolTip="Windows Vista/7 theme"
Command="{Binding Path=SelectAeroTheme}"/>
而在視圖模型的命令和當前選擇的定義:
public enum ESelectedTheme
{
Generic,
Luna,
Aero
}
ESelectedTheme _selectedTheme;
ICommand _selectGenericThemeCommand;
public ICommand SelectGenericThemeCommand
{
get { return _selectGenericThemeCommand ?? (_selectGenericThemeCommand = new RelayCommand(param => SelectGenericTheme(),
param => true)); }
}
void SelectGenericTheme()
{
_selectedTheme = ESelectedTheme.Generic;
}
ICommand _selectLunaThemeCommand;
public ICommand SelectLunaThemeCommand
{
get
{
return _selectLunaThemeCommand ?? (_selectLunaThemeCommand = new RelayCommand(param => SelectLunaTheme(),
param => true));
}
}
void SelectLunaTheme()
{
_selectedTheme = ESelectedTheme.Luna;
}
ICommand _selectAeroThemeCommand;
public ICommand SelectAeroThemeCommand
{
get
{
return _selectAeroThemeCommand ?? (_selectAeroThemeCommand = new RelayCommand(param => SelectAeroTheme(),
param => true));
}
}
void SelectAeroTheme()
{
_selectedTheme = ESelectedTheme.Aero;
}
我有2個問題(希望是允許一個門柱內側):
- 我想在XAML的財產器isChecked綁定到值,我被選中(_selectedTheme)。我想我需要寫一個轉換器,但我不知道如何。
- 我做了3個ICommands副本(每個主題一個)......如果我有20個主題......有沒有辦法讓這個代碼參數化?
在此先感謝。
您可以指定['CommandParameter'](http://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.com和parameter_aspx),並詢問如何參數化命令?你是否一直忽略'param => ...'而不想如何使用它? – 2012-02-18 00:47:19
使用參數我的意思是有3個命令只使用1個命令(但我會檢查CommandParameter是如何工作的,這可能有幫助)。感謝您的評論。 – 2012-02-18 00:48:57
使用'RelayCommand(T)'作爲謂詞傳入'true'是毫無意義的,因爲它默認以這種方式開始。 – 2012-02-18 01:09:02