【问题标题】:MVVM Textbox binding, updating data from ModelMVVM 文本框绑定,从模型更新数据
【发布时间】:2015-01-22 18:45:56
【问题描述】:

我一直在努力将我的应用程序迁移到 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";
    }

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

我似乎找不到其他类似的例子?我是不是搞错了?

【问题讨论】:

  • 如果您希望模型中的属性更改能够通过,您需要让您的模型对象实现 INotifyPropertyChanged 并订阅您的视图模型中的这些更改,然后通过在您的视图模型中引发适当的 OnPropertyChanged 来传播。跨度>
  • 检查绑定模式。 {绑定路径=输入,模式=TwoWay}

标签: c# wpf mvvm


【解决方案1】:

@user469104 基本正确。

如果您希望将更改对象内部传播到 UI,您需要让 那个 对象实现 INotifyPropertyChanged 并在 setter 中引发 PropertyChanged您关心的属性。

然而,如果 View/ViewModel 直接使用这个对象(就像你的一样),这将自动工作。您不需要自己捕获PropertyChanged 事件。

由于XmlItems 实际上是一个 DTO,我会完全按照我的描述去做。您实际上并不需要单独的 ViewModel/Model 业务对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2015-12-17
    • 2014-01-29
    • 2015-10-16
    • 2012-11-24
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多