【问题标题】:Dependency Properties with Explicit Interfaces具有显式接口的依赖属性
【发布时间】:2010-09-28 08:42:58
【问题描述】:

我正在为我们的部门制作一个 WPF 演示,向他们展示 WPF 的优势,同时尝试遵守我们的开发标准(依赖注入和将对象开发到显式接口)。

我现在有点碰壁了。我正在使用 MVVM 设计模式实现视图,并且每次更新视图模型 (VM) 上的属性时,我都需要更新 TextBlocks Text 属性。为此,我将 VM 属性定义为 Dependency Property,并将视图中的 TextBlocks Text 属性绑定到它。

现在 MV 属性在我的界面上,并且(根据我们的开发标准)明确定义。从视图中,我将视图中 TextBlock 的 Text 属性绑定到依赖属性属性(不是静态部分),但是当依赖属性值更改时,这不会更新我的视图(我知道如何绑定到显式接口,所以这个据我所知,这不是问题)。

任何帮助将不胜感激。我可以将依赖属性与显式接口一起使用吗?如果可以,如果没有,您对我在这种情况下可以做什么有任何想法吗?

感谢您的阅读,期待您的回复。

亚当

【问题讨论】:

  • 您能否提供 XAML 和/或 C# 代码的示例?这将帮助我了解如何提供帮助,因为我非常擅长 WPF 绑定,但在理解 MVVM 方面还不是很好。

标签: c# wpf mvvm dependency-properties


【解决方案1】:

我不完全确定我是否正确理解了您的问题,但为什么不在您的 ViewModel 上简单地使用 INotifyPropertyChanged

例如:

interface MyInterface : INotifyPropertyChanged
{
    string Text { get; set; }
}

class MyViewModel : MyInterface
{
    private string text;
    public string Text 
    {
        get { return text; }
        set 
        { 
            if (text != value)
            {
               text = value;
               // TODO: Raise the NotifyPropertyChanged event here
            }
        }
    }
}

有了这个,你应该能够简单地绑定到Text 属性

【讨论】:

  • 对不起,我没有意识到有人回应了这个!我会试一试,让你知道。谢谢你的建议!
  • 是的,非常感谢您的建议...我还有更多的阅读要做! :)
【解决方案2】:

这个问题有点令人困惑,但我会尝试一下。我尝试了依赖属性的几种变体,但无法使其与以下界面一起使用。

interface IViewModel
{
    string Text { get; set; }
}

我使用以下语法在实现类上注册了属性(每个都在不同的测试中)。

public static readonly DependencyProperty TextProperty = 
    DependencyProperty.Register("Text", 
        typeof(string), typeof(IViewModel));

然后我尝试显式或隐式实现接口,但无济于事。唯一有效的组合是我使用的时候。

public static readonly DependencyProperty TextProperty = 
    DependencyProperty.Register("Text", 
        typeof(string), typeof(ImplementingClass));

如果您遇到问题并正在寻找其他 WPF 示例,您可能需要查看。

祝你好运。

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 2021-12-04
    • 1970-01-01
    • 2012-04-16
    • 2011-10-14
    • 1970-01-01
    • 2012-01-20
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多