MVVM文本框绑定,从Model更新数据

时间:2015-01-22 18:45:57

标签: c# wpf mvvm

我一直在努力将我的应用程序移动到MVVM。 我试图通过MVVM从一些数据绑定许多文本框。

型号:

public class XMLItems 
{
string input;
public string Input
    {
        get { return input; }
        set { input = value; }
    }
}

视图模型

 public ViewModel() //Translates ICommands to methods
    {
           _ items = new XMLItems { Input = "" };
    }

    XMLItems _items;
    public XMLItems Items
    {
        get
        {
            return _items;
        }
        set
        {
            _items = value;
        }
    }

    public string Input
    {
        get { return Items.Input; }
        set
        {
            if (Items.Input != value)
            {
                Items.Input = value;
                OnPropertyChanged("Input");
            }
        }
    } 

    public void ChangeInput(object obj)
    {
        Input = "123";
    }

    void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;

这样一切顺利。触发ChangeInput函数时,文本会更新123

但我需要做的是从我的模型中更新我的文本,其中包含所有代码逻辑,这发生在我的应用程序中的几个地方(更新文本)。但这似乎不起作用。 例如,如果我开枪:

public void ChangeText()
    {
        Input = "456";
    }

...在我的模型中,它没有更新文本?

我似乎无法找到这样的其他例子?我错了吗?

1 个答案:

答案 0 :(得分:2)

@ user469104大部分都是正确的。

如果您希望将内部的对象传播到UI,则需要对象实现INotifyPropertyChanged并引发{{1}在你关心的属性的setter中。

但是,如果View / ViewModel直接使用此对象(就像你的那样),这将自动生效。您无需亲自捕获PropertyChanged事件。

由于PropertyChanged实际上是DTO,我会按照我的描述完成。您实际上并不需要单独的ViewModel / Model业务对象。