【问题标题】:wpf databinding - two way binding with a string?wpf 数据绑定 - 与字符串的两种方式绑定?
【发布时间】:2009-09-30 18:17:41
【问题描述】:

我的视图模型上有一个字符串类型的简单属性。我想将它绑定到一个文本框,以便更改文本框更新字符串并更改字符串更新文本框。我真的有一个围绕实现 INotifyPropertyChanged 的​​字符串类型的包装类,还是我在这里遗漏了一些非常简单的东西?

【问题讨论】:

    标签: .net wpf data-binding


    【解决方案1】:

    实现 INotifyPropertyChanged 真的很容易。但我会做什么,ViewModel 类几乎总是(如果不是总是)从 DependencyObject 继承;我会将此文本属性设置为 DependencyProperty,它会自动通知对其绑定的任何内容的更改。您可以使用 C# 中的 propdp 快捷方式(在 Visual Studio 2008 中,不确定是否也在 2005 中)更快地创建 DependencyProperty,只需键入 propdp 并按两次 Tab 键。它看起来像这样:

        public string SomeText
        {
            get { return (string)GetValue(SomeTextProperty); }
            set { SetValue(SomeTextProperty, value); }
        }
    
        // Using a DependencyProperty as the backing store for SomeText.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty SomeTextProperty =
            DependencyProperty.Register("SomeText", typeof(string), typeof(YourClassName), new UIPropertyMetadata(String.Empty));
    

    【讨论】:

    • 我们不是通过从依赖对象派生来让我们的 ViewModel 类变得沉重吗?
    • 可能,但有好处。我没有事实可以确切地告诉你它们应该始终从 DependencyObject 派生,但我已经在许多文章中阅读过它并在许多视频中听到过,例如 blog.lab49.com/archives/2650 Jason Dolinger Intro to MVVM 模式。不过这听起来对我来说是正确的,因为 VM 类将控制窗口的所有方面(状态、动画、绑定)。
    • 我也观看了 JD 对 MVVM 的介绍,发现它是迄今为止我在 WPF 上看到的信息量最大的截屏视频。这是我现在甚至使用 MVVM 模式而不是使用内联 winforms 编码风格攻击程序的唯一原因。我不确定权重依赖对象带来了什么,但考虑到视图模型应该服务的目的,它似乎是一个相当自然的基类。
    【解决方案2】:

    实际上,您不必围绕字符串类型创建包装类。 INotifyPropertyChanged 将为每个 ViewModel 类实现。需要此接口来向绑定框架发送有关更改数据的通知。

    我建议访问 http://mvvmfoundation.codeplex.com/ 并将 MVVM 基础类合并到您的 WPF 项目中。 MVVM 基础提供了一组基本的可重用类,每个人都应该使用。虽然还有其他广泛的 WPF 框架,如 Cinch、Onyx 等,但您可以使用。

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 我给了 Carlo 答案,因为他有点冗长,但也给了你的评价。谢谢!
      猜你喜欢
      • 2016-02-27
      • 2012-07-31
      • 2017-01-03
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 2021-03-01
      • 2017-12-29
      • 2020-02-15
      相关资源
      最近更新 更多