如何使用MVVM实现silverlight dataform的IsEnabledChanged

2024-01-31

我正在寻找如何使用 MVVM light 实现数据表单的属性 IsEnabledChanged 的​​示例,我设置了触发器但不确定实现。所以,这是版本背后的代码:

  void DataForm_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        if (!IsEnabled)
        {
            VisualStateManager.GoToState(DataForm, "Disabled", true);
        }
        else
        {
            VisualStateManager.GoToState(DataForm, "Normal", true);
        }
    }

DataForm.IsEnabledChanged += new DependencyPropertyChangedEventHandler(DataForm_IsEnabledChanged);

在使用 MVVM light 的 xaml 中我这样做了:

 <i:EventTrigger EventName="IsEnabledChanged">
                    <cmdextras:EventToCommand Command="{Binding IsEnabledChangedCommand}" CommandParameter="{Binding .}" />
                </i:EventTrigger>

现在,需要弄清楚如何翻译后面的代码以使用中继命令。


我创建了一个行为,它执行与数据表单的 EditStarted 事件类似的操作。

public class EditableDataFormBehavior : Behavior<RadDataForm>
{
    protected override void OnAttached()
    {
        base.OnAttached();

        AssociatedObject.Loaded += AssociatedObject_Loaded;
    }

    void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
    {
        AssociatedObject.CurrentItemChanged += AssociatedObject_CurrentItemChanged;
    }

    void AssociatedObject_CurrentItemChanged(object sender, EventArgs e)
    {
        var editableObject = AssociatedObject.CurrentItem as INotifyEditableObject;
        if (editableObject != null)
        {
            editableObject.EditStarted += Object_EditStarted;
        }
    }

    void Object_EditStarted(object sender, EventArgs e)
    {
        AssociatedObject.BeginEdit();
    }

    protected override void OnDetaching()
    {
        // detach the event handler
        AssociatedObject.Loaded -= AssociatedObject_Loaded;
        AssociatedObject.CurrentItemChanged -= AssociatedObject_CurrentItemChanged;

        var editableObject = AssociatedObject.DataContext as INotifyEditableObject;
        if(editableObject!=null)
            editableObject.EditStarted -= Object_EditStarted;
        base.OnDetaching();
    }


}

您只需要通过附加到 IsEnabledChanged 事件来稍微修改即可。您正在尝试实现仅查看行为,而视图模型对此一无所知。这样做的主要好处是它比隐藏代码更可重用。

在事件处理程序中,您将添加代码:

    if (!IsEnabled)
    {
        VisualStateManager.GoToState(DataForm, "Disabled", true);
    }
    else
    {
        VisualStateManager.GoToState(DataForm, "Normal", true);
    }

将行为附加到数据表单(我的是为 Telerik 制作的,但应该可以通过 sdk 实现)

 <i:Interaction.Behaviors>
                <utilities:EditableDataFormBehavior/>
 </i:Interaction.Behaviors>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用MVVM实现silverlight dataform的IsEnabledChanged 的相关文章

随机推荐

  • Rails 4 博客 /:year/:month/:title 具有清晰的路由

    Rails 4 中还有另一种更简洁的方式来实现路由 例如 blog 2014 8 blog post title blog 2014 8 blog 2014 blog 2014 8 tags tag 1 tag 2 page 4 blog
  • X509Chain.Build()方法解释

    我想验证证书链 我得到了X509Certificate2集合并必须验证所有证书是否构建一条链 通常 为了验证证书链 我应该从叶证书中获取数字签名并检查它是否由根证书签名 but在 NET中我找不到从X509Certificate2目的 因此
  • 在 Ansible 即席命令中使用 Ansible 事实

    是否可以使用通常包含在中的内容ansible facts在 Ansible 即席命令中 例如 我有一个文件位于 tmp myFile在我所有的服务器上 我想做 ansible all i inventory file m fetch a s
  • Python语言-使用OOP求圆心

    class Point def init self initX initY Create a new point at the given coordinates self x initX self y initY def getX sel
  • 以管理员身份运行批处理文件 - Windows 7 - 从网络文件系统命令“运行方式”

    我需要设置程序安装程序的交付 该程序有一个program installer exe 和一个文件夹 我在创建安装程序时无法将其包含在安装程序中 因此 当用户需要安装该程序时 我通过邮件向他发送一个批处理文件 echo off if DEFI
  • 为什么 classOf[A.type] 无法编译?

    的签名Predef classOf https github com scala scala blob bda011524f7619b61b4fcc8172f088d2445e947e src library scala Predef sc
  • 添加跳过按钮以快进 .fadeIn / .fadeOut?

    只是为了澄清一下 当您加载我的网站时 我有一些文本淡入 引用 然后淡出 然后一段新的文字 我的品牌名称 淡入 因为我希望人们有足够的时间阅读第一个文本 引文 所以淡入和淡出有点长 但是我不希望人们在第五次访问该网站并不得不等待后变得不耐烦每
  • 我如何索引这个 numpy 数组? [复制]

    这个问题在这里已经有答案了 给定一个 numpy 矩阵a形状的 5 3 和一个索引向量b形状的 5 索引向量中的每个条目都在 0 到 2 之间 如何创建一个新向量c基于a及其索引向量b Use arange对于另一个维度 c a np ar
  • 使用 Google Cloud 添加计费方式会导致“意外错误”

    我一直在尝试向我的谷歌计算引擎添加计费方法 但没有任何运气 输入我的 Visa 卡详细信息并单击提交按钮后 我总是收到以下消息 发生意外的错误 请稍后再试 我正在尝试创建一个谷歌计算引擎实例 但如果没有启用计费 这是不可能的 我已经尝试通过
  • 如何在输出后将用户输入保持在同一行?

    我正在尝试编写询问用户年龄然后输入的代码 但我希望数字在您输入后出现在问题旁边 我的代码如下所示 System out println Enter a number num1 userIn nextInt 它工作正常 但数字总是出现在下面的
  • sql server 中列总和的算术溢出

    我正在尝试获取列总数 但是当我运行此查询时 出现以下错误 有什么建议吗 SELECT SUM Size as total FROM AllDocs Where DirName LIKE sites test test ERROR Msg 8
  • 如何在核心图轴的末尾设置箭头?

    我发现 Core Plot 是非常好的绘图库 但有一个小问题 我找不到任何方法在绘图轴的末端设置方向箭头 我可能在这里错过了什么吗 Core Plot 尚不支持此功能 您可以在核心图处添加增强请求问题跟踪器 http code google
  • 在 Visual Studio Code 上设置 OmniSharp 的 C# 格式选项?

    我正在尝试利用与 Visual Studio Code 的集成 但无法弄清楚如何设置 C 格式选项 这config json就在我的 Mac 上 OmniSharp exe 旁边 Applications Visual Studio Cod
  • 真正清除终端屏幕[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 使用clear终端上的命令只会欺骗用户 让他们认为屏幕已被清除 当您使用鼠标滚动时 您仍然可以看到先前命令的输出 当你淹没在文字海啸中时
  • 无法恢复 TextVectorization 类的图层 - 文本分类

    系统信息 谷歌合作实验室 当我运行官方张量流基本文本分类提供的示例时 一切运行良好 直到模型保存 但是当我加载模型时 它给了我这个错误 运行时错误 无法恢复 TextVectorization 类的图层 TextVectorization
  • 为什么 Nutch 似乎不知道“Last-Modified”?

    我将 Nutch 设置为 60000 的 db fetch interval default 这样我就可以每天爬行 如果我不这样做 当我第二天抓取时它甚至不会查看我的网站 但是 当我第二天进行爬网时 昨天获取的每个页面都会获取 200 响应
  • 使用 hibernate 和 gilead for gwt 添加到实体类中保存的列表时出现 LazyInitializationException

    是的 我正在与 hibernate gilead 和 gwt 合作 将我的数据保留在网站的用户和文件上 我的用户有一个文件位置列表 我正在使用注释将我的类映射到数据库 我得到了org hibernate LazyInitialization
  • 从 Heroku 到远程数据库的 SSH 隧道?

    我正在考虑在 Heroku 上部署一个小型 Rails 应用程序 为了省钱 我希望我的应用程序使用外部数据库 我可以免费访问 而不是 Heroku 托管的数据库 问题是免费数据库只接受本地连接 要从 Heroku 访问它 我需要通过 SSH
  • 使用 Xcode 8 找不到有效的“aps-environment”权利字符串

    我安装了 Xcode 8 从那时起我就得到了 应用程序 didFailToRegisterForRemoteNotificationsWithError 线程 编号 1 名称 main 错误 错误 域 NSCocoaErrorDomain
  • 如何使用MVVM实现silverlight dataform的IsEnabledChanged

    我正在寻找如何使用 MVVM light 实现数据表单的属性 IsEnabledChanged 的 示例 我设置了触发器但不确定实现 所以 这是版本背后的代码 void DataForm IsEnabledChanged object se