以编程方式将控件作为 CommandParameter 传递
Passing the control as CommandParameter programmatically
试图在xaml
中传递控制时,我们编写如下代码:
<MenuItem x:Name="NewMenuItem" Command="{Binding MenuItemCommand}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MenuItem}}}" />
我正在尝试以编程方式创建一个 MenuItem
,如下所示:
var pluginMenuItem = new MenuItem
{
Header = "NewMenuItem,
Command = MenuItemCommand,
CommandParameter = "{Binding RelativeSource= {RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}}}"
};
这将 string
"{Binding RelativeSource= {RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}}}"
作为 CommandParameter
。
我错过了什么?
您可以使用下面提到的代码实现目标
你的 xaml 代码看起来像
<Menu Name="menu" ItemsSource="{Binding MenuList,Mode=TwoWay}">
</Menu>
你的 ViewModel 看起来像
public class MainViewModel : ViewModelBase
{
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
MenuList.Add(new MenuItem()
{
Header = "MenuItem1",
Command = MenuItemCommand,
CommandParameter = "FirstMenu"
});
MenuList.Add(new MenuItem()
{
Header = "MenuItem2",
Command = MenuItemCommand,
CommandParameter = "SecondMenu"
});
}
private ObservableCollection<MenuItem> _menuList;
public ObservableCollection<MenuItem> MenuList
{
get { return _menuList ?? (_menuList = new ObservableCollection<MenuItem>()); }
set { _menuList = value; RaisePropertyChanged("MenuList"); }
}
private RelayCommand<string> _MenuItemCommand;
public RelayCommand<string> MenuItemCommand
{
get { return _MenuItemCommand ?? (_MenuItemCommand = new RelayCommand<string>(cmd)); }
set { _MenuItemCommand = value; }
}
private void cmd(string value)
{
MessageBox.Show(value);
}
}
试图在xaml
中传递控制时,我们编写如下代码:
<MenuItem x:Name="NewMenuItem" Command="{Binding MenuItemCommand}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MenuItem}}}" />
我正在尝试以编程方式创建一个 MenuItem
,如下所示:
var pluginMenuItem = new MenuItem
{
Header = "NewMenuItem,
Command = MenuItemCommand,
CommandParameter = "{Binding RelativeSource= {RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}}}"
};
这将 string
"{Binding RelativeSource= {RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}}}"
作为 CommandParameter
。
我错过了什么?
您可以使用下面提到的代码实现目标
你的 xaml 代码看起来像
<Menu Name="menu" ItemsSource="{Binding MenuList,Mode=TwoWay}">
</Menu>
你的 ViewModel 看起来像
public class MainViewModel : ViewModelBase
{
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
MenuList.Add(new MenuItem()
{
Header = "MenuItem1",
Command = MenuItemCommand,
CommandParameter = "FirstMenu"
});
MenuList.Add(new MenuItem()
{
Header = "MenuItem2",
Command = MenuItemCommand,
CommandParameter = "SecondMenu"
});
}
private ObservableCollection<MenuItem> _menuList;
public ObservableCollection<MenuItem> MenuList
{
get { return _menuList ?? (_menuList = new ObservableCollection<MenuItem>()); }
set { _menuList = value; RaisePropertyChanged("MenuList"); }
}
private RelayCommand<string> _MenuItemCommand;
public RelayCommand<string> MenuItemCommand
{
get { return _MenuItemCommand ?? (_MenuItemCommand = new RelayCommand<string>(cmd)); }
set { _MenuItemCommand = value; }
}
private void cmd(string value)
{
MessageBox.Show(value);
}
}