绑定到ViewModel的子类属性

时间:2012-01-18 23:19:02

标签: c# wpf xaml data-binding mvvm

我很难将我视图中的StatusBarItem内容元素绑定到我的ViewModel中的子类属性,我正在使用MVVM-Light框架/

视图模型:

public class PageMainViewModel : ViewModelBase
{
    LoggedOnUserInfo UserInfo;

    public LoggedOnUser UserInfo
    {
       set
       {
          _UserInfo = value;
          RaisePropertyChanged("UserInfo");
       }
    }
}

为了完全清晰,LoggedOnUser类定义如下

public class LoggedOnUser : INotifyPropertyChanged
{
    private string _Initials;        

    public event PropertyChangedEventHandler PropertyChanged;            

    public LoggedOnUser()
    {

    }

    [DataMember]
    public string Initials
    {
        get { return _Initials; }
        set 
        { 
             _Initials = value;
            OnPropertyChanged("Initials");
        }
    }

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

}

我的视图DataContext正在设置并正在工作,因为我能够看到其他绑定工作,但我尝试绑定到我的XAML中的UserInfo.Initials属性正在产生一个空结果。

XAML:

<StatusBarItem Grid.Column="0" Content="{Binding UserInfo.Initials}" Margin="5,0,0,0" VerticalAlignment="Center" Focusable="False" />

UserInfo属性是在创建viewModel之后设置的,因为有几个因素,但我认为我的属性已更改,这样就可以了。

对此的任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:2)

UserInfo似乎没有吸气剂,绑定会运气不好。

(另外check for binding errors遇到绑定问题时,他们可能会告诉你他们所有的问题)

答案 1 :(得分:0)

我不太确定为什么你在UserInfo_属性中绑定了initials_属性。 如果没有UserInfo_属性的getter,则无法访问initials_属性。

我建议分别绑定后者。

答案 2 :(得分:0)

将getter添加到您的userinfo

public class PageMainViewModel : ViewModelBase
{
  LoggedOnUserInfo UserInfo;

  public LoggedOnUser UserInfo
  {
     get {return _UserInfo;}
     set
     {
        _UserInfo = value;
        RaisePropertyChanged("UserInfo");
     }
  }
}

和H.B.一样说 - 检查输出窗口是否存在绑定错误