如何将DataContext设置为多个类?

Ner*_*zIT 0 .net c# data-binding wpf mvvm

所以我刚刚进入数据绑定和MVVM,我遇到了一个小问题.

我有一个名为的单独类的WPF项目 Player

在我的MainWindow班级中,我将设置为该类DataContext的实例Player

public partial class MainWindow : Window
    {
        Player player = new Player();
        public MainWindow()
        {
            InitializeComponent();
            DataContext = player;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在那个类中,我有一个属性,我在其中设置构造函数中的值.

public class Player : INotifyPropertyChanged
    {
        private string _Firstname;

        public Player()
        {
            _Firstname = "William";
        }
        public string Firstname
        {
            get { return _Firstname; }
            set { _Firstname = value; }
        }


        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后在XAML中有一些简单的数据绑定逻辑 TextBox

<TextBox Name="TbName" HorizontalAlignment="Left" Height="23" Margin="243,119,0,0" TextWrapping="Wrap" Text="{Binding Path=Firstname}" VerticalAlignment="Top" Width="120"/>
Run Code Online (Sandbox Code Playgroud)

现在..让我们说我有另一个叫做我不知道的类...... Acheivments ..我如何将Text另一个控件设置为该类的属性?我将不得不设置另一个DataContext,我不知道如何设置多个datacontexts.

问题:如何正确设置两个datacontexts,以便将不同的类绑定到不同的控件?

mm8*_*mm8 6

您只能将DataContext属性设置为单个对象,但此对象的类型可能包含您可以绑定到的多个属性:

class ViewModel
{
    public Player Player { get; } = new Player();
    public Achievement Achievement { get; } = new Achievement();
}

public MainWindow()
{
    InitializeComponent();
    DataContext = new ViewModel();
}
Run Code Online (Sandbox Code Playgroud)

XAML:

<TextBox Text="{Binding Path=Person.Firstname}" />
...
<TextBlock Text="{Binding Achievement.SomeProperty}" />
Run Code Online (Sandbox Code Playgroud)