Csharp/C#教程:使用telerik radtreecontrol双击MVVM绑定方法分享


使用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

(0)
上一篇 2022年1月4日
下一篇 2022年1月4日

精彩推荐