使用 Telerik radtreecontrol MVVM 绑定双击方法

2024-02-14

我已经花了很长一段时间来研究这个问题。尽管我内心深处的人说“不要这样做”,但现在是时候问路了。

我正在使用 MVVM 设计模式在 WPF C# 中进行编码。我们尝试严格遵守该模式,并且在后面的代码中不放置任何内容,除非没有选择或者这样做完全不合理。话虽如此,我正在使用 Telerik RadTreeView。这是我的 XAML 中的一个片段:

<telerik:RadTreeView IsExpandOnSingleClickEnabled="True" IsLineEnabled="True" Margin="5" 
                                 ItemsSource="{Binding ItemsView}"
                                 SelectedItem="{Binding SelectedWidget, Mode=TwoWay}"
                                 ItemTemplate="{StaticResource NodeTemplate}" />

目前,树工作正常,因此如果您突出显示树项目并单击视图上的“确定”按钮,则一切正常。但是,我还需要允许用户双击树项目之一。这意味着我已经有了一个命令和方法,受保护的重写 void OkAction(),在我的视图模型中具有所需的逻辑。 Telerik 提供了一个名为项目双击这应该为树项目双击提供功能。但我找不到任何东西可以让我在视图模型中执行此操作。换句话说,我该如何进行绑定?我们的项目中还有一个用于双击的行为设置,我被告知可以使用它,但我没有行为方面的经验。我对 WPF 还不太了解。

如果有帮助,这里是 Telerik 文档的链接:http://www.telerik.com/help/wpf/radtreeview-events-overview.html http://www.telerik.com/help/wpf/radtreeview-events-overview.html

我将不胜感激任何人可以提供的任何帮助或指导。

斯坦试试这个:

<Grid.Resources>
            <DataTemplate x:Key="WidgetTemplate">
                <StackPanel Orientation="Horizontal">
                    <Image Source="/Resources/gear1.png" Margin="1" Stretch="None" />
                    <TextBlock Text="{Binding Name}" VerticalAlignment="Center" Margin="6,0,0,0" />
                </StackPanel>
            </DataTemplate>

            <HierarchicalDataTemplate x:Key="NodeTemplate" ItemsSource = "{Binding Children}" ItemTemplate="{StaticResource WidgetTemplate}">
                <TextBlock Text="{Binding Name}"/>
            </HierarchicalDataTemplate>

        </Grid.Resources>

您可能希望在此处使用 DoubleClick 已有的附加行为。

否则,这里是我使用的完整代码,它创建附加行为,并将创建两个绑定到命令和可选命令参数的附加属性。

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- 请记住添加附加行为所在的命名空间。

<telerik:RadTreeView IsExpandOnSingleClickEnabled="True" 
                     IsLineEnabled="True" 
                     Margin="5" 
                     ItemsSource="{Binding ItemsView}"
                     SelectedItem="{Binding SelectedWidget, Mode=TwoWay}"
                     ItemTemplate="{StaticResource NodeTemplate}"
                     acb:MouseDoubleClick.Command="{Binding ShowItemCommand}" />

示例ViewModel.cs

private RelayCommand _showItemCommand;
public RelayCommand ShowItemCommand
{
    get
    {
        return _showItemCommand ?? (_showItemCommand =
            new RelayCommand(ShowItemDetails, IsItemSelected));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Telerik radtreecontrol MVVM 绑定双击方法 的相关文章

  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • 无法在 CUDA 中找到 1 到 100 数字的简单和?

    我正在研究使用 CUDA 的图像处理算法 在我的算法中 我想使用 CUDA 内核找到图像所有像素的总和 所以我在cuda中制作了内核方法 来测量16位灰度图像的所有像素的总和 但我得到了错误的答案 所以我在cuda中编写了一个简单的程序来查
  • 从结构调用 C++ 成员函数指针

    我找到了有关调用 C 成员函数指针和调用结构中的指针的信息 但我需要调用结构内部存在的成员函数指针 但我无法获得正确的语法 我在类 MyClass 的方法中有以下代码片段 void MyClass run struct int MyClas
  • 如何以编程方式删除受信任的根证书颁发机构中的证书?

    我需要能够从组织中的每台电脑中删除特定的证书 是的 我可以逐个座位 但我要到周四才能完成 而且我没有人力逐个座位 是否有使用 C 的编程方式来执行此操作 我认为你不需要编写任何 C 看看certmgr exe del http msdn m
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • 如何在 C# 中以编程方式将行添加到 DataGrid?

    正如标题所述 我正在尝试使用 C 以编程方式将行添加到 DataGrid 但我似乎无法使其工作 这是我到目前为止所拥有的 I have a DataGrid declared as dg in the XAML foreach string
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 一个好的 WPF 滚动时间线控件? (精美的日期时间选择器)

    我正在寻找可以用作时间线控件的东西 一种 横幅 用户可以向左或向右拖动以前进或后退 然后他或她应该能够在该控件上选择一个时间点 一个精美的日期时间选择器 有任何想法吗 欢迎您尝试我的新 TimelineControl 我已经在 codepl
  • X 轴和 Z 轴上的 Quaternion.Slerp,无 Y 轴

    I am trying to rotate the Player about X Y and Z axis The Y axis should not move from last angle Example if I rotate 45
  • 如何在 C++ 中正确使用 cin.fail()

    我正在编写一个程序 从用户那里获取整数输入cin gt gt iUserSel 如果用户输入一个字母 程序就会进入无限循环 我试图用下面的代码来阻止这种情况 但程序进入无限循环并打印出 错误 输入 我该如何修复我的程序 cin gt gt
  • 更改私有模块片段是否会导致模块重新编译?

    On 此页面有关 C 20 模块功能 https www modernescpp com index php c 20 modules private module fragment and header units 我发现了这样的说法 借
  • Clang 5.0 上的 vsprintf 和 vsnprintf [-Wformat-nonliteral] 警告

    我有这段代码 static void err doit int errnoflag int level const char fmt va list ap int errno save unsigned long n char buf MA
  • 具有多个父项的 Qt 树模型

    我想构建一棵树 其中一个元素可以引用另一个元素 我想要构建的树是 像这样的东西 A B C D E F P this is a pointer to C D first child of C E second child of C I fo
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • 如何防止 Lotus Notes 用户转发或复制通过 System.Net.Mail 发送的邮件?

    我想使用 SMTP 客户端 uiing microsft net 以 C 作为编程语言发送电子邮件 但是对于通过SMTP客户端发送的电子邮件 我们是否可以添加 禁止转发 或 禁止复制 等安全功能 我不希望电子邮件的收件人转发或复制电子邮件的
  • 在多线程环境中捕获信号

    我有一个大型程序 需要尽可能具有弹性 并且有大量线程 我需要捕获所有信号SIGBUS SIGSEGV 并在必要时重新初始化有问题的线程 或者禁用该线程以继续减少功能 我的第一个想法是做一个setjump 然后设置信号处理程序 可以记录问题
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • 使用通用存储库模式和流畅的 nHibernate

    我目前正在开发一个中型应用程序 它将访问不同站点上的 2 个或更多 SQL 数据库等 我正在考虑使用类似的东西 http mikehadlow blogspot com 2008 03 using irepository pattern w

随机推荐

  • 将 scala/spark 信息写入 MongoDB

    我有一个日志数据 其中包含如下数据 Started by timer Finished SUCCESS 对于每个日志数据 日志状态 此处为 Finished 和状态 SUCCESS 需要写入MongoDB case class Logs s
  • XMLHttpRequest 和 http 流

    我的目标是从浏览器读取 HTTP MP3 音频流并访问原始音频数据 HTML5 让我可以轻松播放流 但据我所知 不允许访问原始音频数据 它只是播放它 JS XMLHTTP请求可以通过HTTP下载文件并处理原始音频数据 它似乎是一个很好的候选
  • 这个 MATLAB 循环是否有更优雅的替代方案?

    我想更好地在 MATLAB 中对循环进行矢量化 目前 我正在尝试计算整数列表中值的出现次数 我的代码与此类似 list 1 2 2 3 1 3 2 2 2 1 5 occurrence list zeros 1 max list for x
  • 为什么 uglify-js 会报告“警告:输出超过 32000 个字符”?

    构建管道是 Typescript browserify browserify css uglify 运行时库 react bootstrap 到目前为止 我的应用程序功能很少 这就是为什么我问这是否会在以后困扰我 即使它现在看起来可以工作
  • 析构函数与 IDisposable?

    我读过有关在 C 中处置对象 IDisposable 接口和析构函数的内容 但对我来说 它们似乎做了同样的事情 两者有什么区别 我为什么要使用其中一种而不是另一种 事实上 在这个示例 下面的链接 中 这段代码同时使用了 IDisposabl
  • 语音识别和语音合成入门

    我想开始语音识别和语音合成 在基于语音识别的原型 https stackoverflow com questions 3865351 prototype based on speech recognition有人告诉我使用微软语音服务器 s
  • 显示相同项目的放大弹出窗口

    参考这个question https stackoverflow com questions 26151953 magnific popup showing first item only 它有一个有用的答案 但它是部分答案 因为它只显示三
  • Ajax 调用返回整个页面

    我有以下页面 其中包含一些随机提示 http www javaexperience com tips 我只想在网站的其他页面上显示提示 因此我进行 ajax 调用并将 ajax 响应返回的任何内容添加到 Div 的 HTML 中 DIV h
  • 使用 tidyverse 或 dplyr 进行简单 mutate 引发的错误

    我在使用 tidyverse 包时遇到了严重的问题 无法调试 例如 即使在我过去已经制作的项目中 mutate 也无法正常工作 这一切都是从我安装以下软件包时开始的 library pdftools library tm library s
  • 我不小心删除了 Android 密钥库,如何恢复?

    好吧 我的动作很顺利 我现在无法更新市场中的任何应用程序 因为我不小心删除了我的 Android 密钥库 有谁知道我怎样才能把它拿回来 我尝试过运行恢复程序 但由于某种原因它没有出现 如果您丢失了私钥 它将永远消失 除非您有备份 如果您可以
  • 在asp.net 3.5中导出为pdf

    我正在开发一个 asp net 3 5 应用程序 并且有一个包含表格表单数据的页面 我需要将其导出为 pdf 并进行一些额外的格式化 该页面还有一些图像位于同一表格内 一些图像位于表格外 我也希望将这些图像导出为 pdf 我怎样才能在asp
  • 如何查看php字节码文件

    我这样做是为了学习目的 我读过很多文章 PHP 首先将其源代码转换为字节码 但我无法找到一种方法来查看字节码格式 它是什么样子的 在java和C中有很多方法可以查看字节码文件 但无法在 php 中找到任何文章来查看转换后的字节码 要将 PH
  • 运行集成测试时,构建在 Jetty 启动时等待

    我正在尝试运行一些集成 验收测试 我只想在传递环境变量时运行这些测试 因此我使用以下命令 mvn clean install Denv acceptance 但构建停止于 2015 09 28 18 56 19 273 INFO oejsh
  • 在 C# 中获取网络摄像头的当前状态

    我试图弄清楚如何检查网络摄像头 视频捕获设备是否已被另一个应用程序使用 而无需实际激活它 我当前的方法是使用 AForge NET 库并使用 VideoCaptureDevice 对象的 IsRunning 属性 如下所示 var vide
  • PHP 合并具有相同键和一个相同值的数组

    我需要合并一个 PHP 数组 这个数组有 2 个名为 targetXX 的数组 我可以有 2 个或更多 每个目标都有相同的键 对于每个键 我有一个包含 2 个值 a 和 b 的数组 a 在两个目标中始终相同 但我需要像这样合并两个 B 值
  • 如何从 ASCII 文件写入/读取带有 MultiIndex 的 Pandas DataFrame?

    我希望能够创建一只熊猫DataFrame使用 MultiIndexes 为行和列索引并从 ASCII 文本文件中读取它 我的数据如下所示 col indx MultiIndex from tuples A B C A B C2 A B C3
  • Nodejs child_process.exec :禁用控制台上的标准输出打印

    我正在通过nodejs child process exec执行图像magick识别命令 并在我的脚本中使用从 stdout 返回的字符串 一切正常 但调用会在控制台上打印标准输出消息 如果服务器未重新启动并且控制台一段时间内未清除 则控制
  • 绘制可翻转的矩形

    我得到了代码http support microsoft com kb 314945 http support microsoft com kb 314945绘制一个可翻转 橡皮筋矩形 我向其中添加了代码 这样当我离开鼠标左键时 也会在图像
  • 四舍五入到最接近的好数字

    我正在编写一个应用程序 需要将标签舍入到最接近的 好 数字 我将在下面放置一些代码来演示这一点 但我的问题是我使用了一系列 else if 来查找这个数字 但我无法确定上限 因此这并不是一个好的策略 是否有任何已知的算法或资源可以帮助我 i
  • 使用 Telerik radtreecontrol MVVM 绑定双击方法

    我已经花了很长一段时间来研究这个问题 尽管我内心深处的人说 不要这样做 但现在是时候问路了 我正在使用 MVVM 设计模式在 WPF C 中进行编码 我们尝试严格遵守该模式 并且在后面的代码中不放置任何内容 除非没有选择或者这样做完全不合理