从视图模型访问窗口时,它始终为null

时间:2014-06-28 15:21:59

标签: c# wpf mvvm

我想要做的是在 ILoginView 类型 ComboBoxItemChange.cs 中创建属性是LoginWindow.xaml.cs派生的接口。使用此属性我想授予对LoginWindow内部元素的访问权限。我认为使用 MVVM 模式这是正确的方法。

我的问题是该属性始终为 null

LoginWindow.xaml.cs

public partial class LoginWindow : Window, ILoginView
{
    public LoginWindow()
    {
       InitializeComponent();

       this.DataContext = new ComboBoxItemChange();
       (this.DataContext as ComboBoxItemChange).LoginWindow = this as ILoginView;
    }

    public void ChangeInputFieldsByRole(string role)
    {
        MessageBox.Show(role);
    }
}

ComboBoxItemChange.cs

public class ComboBoxItemChange : INotifyPropertyChanged
{
    public ILoginView LoginWindow { get; set; }

    private void ChangeloginWindowInputFields(string value)
    {
       if (LoginWindow == null)
            return;
       LoginWindow.ChangeInputFieldsByRole(value);
    }
}

ILoginView.cs

public interface ILoginView
{
    void  ChangeInputFieldsByRole(string role);
}

1 个答案:

答案 0 :(得分:1)

如评论中所述:

您正在创建两个不同的实例:

  • ILoginView设置为窗口本身
  • 后面的代码中的一个
  • 您未设置ILoginView的网格资源中的第二个。

删除您在XAML中声明的实例,并从您在代码后面创建的实例中解析绑定。 (DataContext将自动为子控件继承)