UserControl 绑定到模型 属性

UserControl bind to a Model property

我有一个正在增强的 Silverlight/WPF 应用程序。我有一个 UserControl,它需要在模型上的 属性 更改时禁用或启用某些控件。它必须执行一些其他逻辑,所以我不能只将它们绑定到 属性.

在后面的控件代码中,我引用了模型。我知道有一种方法可以绑定到某些属性,并且我知道如何在 XAML 中执行此操作,但在代码隐藏中不知道。

我看到很多实例说要使用 INotifyPropertyChanged 接口,但它似乎并不适用于这种情况。

我正在尝试做的一个例子:

public partial class MyControl : UserControl
{
    private readonly MyModel _model;

    public MyControl(MyModel model)
    {
        _model = model;
        // bind to model's ImportantThing property here
     }
    ...
    // Some method gets called when property changes
    ...
}

public class MyModel
{
    ...
    public bool ImportantThing
    {
        get { return _importantThing; }
        set
        {
            _importantThing = value;

            // This is existing code and notifies some controls, but not the ones
            // I'm interested in. It should notify MyControl as well. I know in
            // most applications, this is OnPropertyChanged();
            RaisePropertyChanged("ImportantThing");
        }
    }
}

有什么指点吗?

一些提示....

您的 issue\solution 听起来像是 ValueConverter 的任务。但首先,我可以在 UserControl 代码隐藏文件中看到代码,你真的应该采用和应用 MVVM 模式......好吧有一个 [陡峭的] 学习曲线,有时你想知道是否值得付出努力(知道我在什么时候做过我从 XAML) 开始...但相信我的话...MVVM,没有其他方法可以使用 WPF 进行开发。如果您尝试将 WinForms UI 逻辑应用到 WPF,它将变成一堆无法维护、难以管理的意大利面条式代码……

您可能会发现这篇 link 到 Rachel Lim 的博客很有用....

https://rachel53461.wordpress.com/category/mvvm/

对于 ValueConverter,看看这个.....

http://www.wpftutorial.net/ValueConverters.html

抱歉,我原来的问题不是很清楚,但我找到了解决方案。事实证明 UserControl(在我原来的例子中是 MyControl)已经在观察模型的变化:

_myModel.PropertyChanged += Model_PropertyChanged;

在现有回调 (Model_PropertyChanged()) 中,我只是查找了我感兴趣的 属性 并添加了我需要的所有其他内容:

void Model_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    if (e.PropertyName == "StatusEnabled")
    {
        // do stuff
    }
    else if (e.PropertyName == "ImportantThing")
    {
        // my stuff
    }
}

感谢大家的意见!