【问题标题】:Communicate from ViewModel to View从 ViewModel 到 View 通信
【发布时间】:2014-02-11 19:43:16
【问题描述】:

我有一种情况,我需要从 ViewModel 到 View 进行通信,以防发生更改。这里的问题是,我要更新的属性没有 DependencyProperty,我已经设法通过打破一点 MVVM 模式规则将其从 View“绑定(不是真的但是..)”到 VM并简单地添加一个事件的代码隐藏:

(ViewModelSomething as DataContext).Password = pb.Password;

这很有效。问题是当我想在 VM 中发生更改时更新视图上的此属性时。有没有可能有这样的联系?

【问题讨论】:

  • 这里有一个类似的问题:stackoverflow.com/questions/1483892/…。不过,您可能不喜欢接受的答案...
  • 为什么不需要用户交互就可以在视图模型中更改密码?

标签: mvvm properties bind


【解决方案1】:

您可以在您的登录视图中创建一个GetCredential() 方法,并且您可以在您的视图模型中从该方法中获取更新的值。

实现会是这样的

View.cs

public Credential GetCredential()
    {
        var credential = new Credential()
        {
            Username = txtUserName.Text,
            Password = txtPassword.Password
        };
        return credential;
    }

你需要一个Credential类

 public class Credential
    {
        public string Username { get; set; }
        public string Password { get; set; }
    }

ViewModel.cs

在提交按钮命令处理程序上,您可以从视图中获取值

 Credential credential = View.GetCredential();

【讨论】:

    【解决方案2】:

    在 ViewModel 上实现 INotifyPropertyChanged

    【讨论】:

    • 已经实现了,问题是属性不知道在哪里绑定它的值,因为视图中没有绑定
    • 问题是PasswordBox.Password不是依赖属性,所以不能绑定...
    • 我知道它不能被绑定,否则我只会使用标准绑定......我在问是否有办法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多