ComboBox 中的 WPF 命令支持
我想让我的视图模型上的命令在我的组合框的选择更改上执行。显然Combobox不支持执行命令。
我创建了一个继承自 Combox 的新类并实现了这个接口。
当我尝试查看控件(在设计器中或在调试中)时,控件不显示。我没有遇到任何异常 - 我的控件是否缺少可视模板或其他内容?
谢谢。
public class CommandSourceComboBox : ComboBox, ICommandSource
{
static CommandSourceComboBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CommandSourceComboBox), new FrameworkPropertyMetadata(typeof(CommandSourceComboBox)));
}
#region ICommandSource Members
public ICommand Command
{
get;
set;
}
public object CommandParameter
{
get;
set;
}
public IInputElement CommandTarget
{
get;
set;
}
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
base.OnSelectionChanged(e);
if (this.Command != null)
{
RoutedCommand command = Command as RoutedCommand;
if (command != null)
{
command.Execute(CommandParameter, CommandTarget);
}
else
{
((ICommand)Command).Execute(CommandParameter);
}
}
}
#endregion
}
I want to have a command on my viewmodel execute on the selectionchanged of my ComboBox. Obviously Combobox does not support executing commands.
I have created a new class that inherits from Combox and implements this interface.
When I try to view the control (in the designer or in debug) the control doesn't show. I don't get any exceptions - is my control missing a visual template or something?
Thanks.
public class CommandSourceComboBox : ComboBox, ICommandSource
{
static CommandSourceComboBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CommandSourceComboBox), new FrameworkPropertyMetadata(typeof(CommandSourceComboBox)));
}
#region ICommandSource Members
public ICommand Command
{
get;
set;
}
public object CommandParameter
{
get;
set;
}
public IInputElement CommandTarget
{
get;
set;
}
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
base.OnSelectionChanged(e);
if (this.Command != null)
{
RoutedCommand command = Command as RoutedCommand;
if (command != null)
{
command.Execute(CommandParameter, CommandTarget);
}
else
{
((ICommand)Command).Execute(CommandParameter);
}
}
}
#endregion
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不知道为什么它没有正确显示。也许您需要执行基本构造函数?
编辑,我实际上测试了它,似乎这条线:
为我打破了它。
这是我的实现,它在设计器中有效:
Not sure why its not displayed correctly. Maybe you need to execute the base constructor?
Edit, I actually tested it and it seems this line:
breaks it for me.
Here is my implementation and it works in the designer: