绑定到ViewModel';s子类属性

本文关键字:子类 属性 ViewModel 绑定 | 更新日期: 2023-09-27 18:20:48

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

ViewModel:

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后设置的,这是由于几个因素,但我认为用我的属性更改的事件,这是可以的。

如有任何建议,我们将不胜感激。

绑定到ViewModel';s子类属性

如果UserInfo上似乎没有getter,那么绑定就不走运了。

(当绑定出现问题时,还会检查绑定错误,它们可能会告诉你它们的所有问题)

将getter添加到您的userinfo

public class PageMainViewModel : ViewModelBase
{
  LoggedOnUserInfo UserInfo;
  public LoggedOnUser UserInfo
  {
     get {return _UserInfo;}
     set
     {
        _UserInfo = value;
        RaisePropertyChanged("UserInfo");
     }
  }
}

和H.B.所说的一样-检查您的输出窗口中的绑定错误

我不太清楚为什么要在UserInfo_属性中绑定initials_属性。如果没有UserInfo_属性的getter,就无法访问initials_属性。

我建议与后者单独绑定。