使用telerik radtreecontrol双击MVVM绑定方法
我一直在研究这个问题愚蠢的时间。 尽管我内心的人说“不要这样做”,现在是时候问路了。
我使用MVVM设计模式在WPF C#中编码。 除非没有选择,否则我们会严格遵守模式,并且不会在代码中加入任何内容,否则这样做是完全不合理的。 话虽如此,我正在使用Telerik RadTreeView。 以下是我的XAML中的一小段内容:
目前树正常工作,因此如果您突出显示树项并单击视图上的“确定”按钮,则一切都很好。 但是,我还需要允许用户双击其中一个树项。 这意味着我已经拥有一个命令和方法, 受保护的覆盖void OkAction() ,在我的视图模型中具有所需的逻辑。 Telerik提供了一个名为ItemDoubleClick的属性,该属性应该为树项双击提供function。 但我找不到任何允许我在视图模型中执行此操作的内容。 换句话说,我该如何进行绑定? 我们的项目中还有一个行为设置,用于双击,我被告知可以使用,但我没有行为经验。 WPF我还是有点湿。
如果有帮助,这里是Telerik文档的链接: http : //www.telerik.com/help/wpf/radtreeview-events-overview.html
我很感激任何人都可以提供帮助或指导。
试试看斯坦:
您可以在此处使用已有的针对DoubleClick的附加行为。
否则,这里是我使用的完整代码,它创建了附加行为,并将创建两个附加属性,它们绑定到Command和可选的命令参数。
AttachedBehaviors.cs
public static class MouseDoubleClick { public static DependencyProperty CommandProperty = DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(MouseDoubleClick), new UIPropertyMetadata(CommandChanged)); public static DependencyProperty CommandParameterProperty = DependencyProperty.RegisterAttached("CommandParameter", typeof(object), typeof(MouseDoubleClick), new UIPropertyMetadata(null)); public static void SetCommand(DependencyObject target, ICommand value) { target.SetValue(CommandProperty, value); } public static void SetCommandParameter(DependencyObject target, object value) { target.SetValue(CommandParameterProperty, value); } public static object GetCommandParameter(DependencyObject target) { return target.GetValue(CommandParameterProperty); } private static void CommandChanged(DependencyObject target, DependencyPropertyChangedEventArgs e) { Control control = target as Control; if (control != null) { if ((e.NewValue != null) && (e.OldValue == null)) { control.MouseDoubleClick += OnMouseDoubleClick; } else if ((e.NewValue == null) && (e.OldValue != null)) { control.MouseDoubleClick -= OnMouseDoubleClick; } } } private static void OnMouseDoubleClick(object sender, RoutedEventArgs e) { Control control = sender as Control; ICommand command = (ICommand)control.GetValue(CommandProperty); object commandParameter = control.GetValue(CommandParameterProperty); if (command.CanExecute(commandParameter)) command.Execute(commandParameter); } }
.xaml – 请记住添加附加行为所在的命名空间。
SampleViewModel.cs
private RelayCommand _showItemCommand; public RelayCommand ShowItemCommand { get { return _showItemCommand ?? (_showItemCommand = new RelayCommand(ShowItemDetails, IsItemSelected)); } }
显然我没有Telerik代码,所以我不能像我想的那样真正帮助,但你可以试试这样的东西。 (免责声明:我是从头脑中写作)
在Grid.Resources
定义您的样式
将样式添加到容器样式。
如果有效,请告诉我。
我尝试了几种方法来实现这一目标。最后,我发现VS2012给了我适合。 我注意到在构建和运行时没有应用更改。
我打开VS2010,发现我没有遇到同样的问题。 在与我的老板交谈之后,我们发现这是一个很好的例子,因为双击严格与UI相关,所以坚持MVVM可能不是最明智的选择。
我只是使用视图模型的实例化作为数据上下文,通过后面的代码跳转到视图模型中。 没花一秒钟就这么做了。
至于其他解决方案,我确信它完全有可能,但由于我的VS2012问题,我无法确认或否认我在这里发布的post。
上述就是C#学习教程:使用telerik radtreecontrol双击MVVM绑定方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1020089.html