gpt4 book ai didi

c# - 如何将 DataContext 设置为多个类?

转载 作者:行者123 更新时间:2023-12-03 11:02:33 24 4
gpt4 key购买 nike

所以我刚刚进入数据绑定(bind)和 MVVM,我对这件事有一个小问题。

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

在我的 MainWindow类(class)我正在设置DataContextPlayer 的一个实例类(class)

public partial class MainWindow : Window
{
Player player = new Player();
public MainWindow()
{
InitializeComponent();
DataContext = player;
}
}

在那个类中,我有一个属性,我在构造函数中设置了一个值。
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));
}
}

然后在 XAML 中, TextBox 有一些简单的数据绑定(bind)逻辑。
<TextBox Name="TbName" HorizontalAlignment="Left" Height="23" Margin="243,119,0,0" TextWrapping="Wrap" Text="{Binding Path=Firstname}" VerticalAlignment="Top" Width="120"/>

现在..假设我有另一个类叫我不知道..成就..
我将如何设置 Text该类的属性的另一个控件?我将不得不设置另一个 DataContext而且我不知道如何设置多个数据上下文。

问题:
如何正确设置两个数据上下文,以便将不同的类绑定(bind)到不同的控件?

最佳答案

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

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

public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}

XAML:
<TextBox Text="{Binding Path=Person.Firstname}" />
...
<TextBlock Text="{Binding Achievement.SomeProperty}" />

关于c# - 如何将 DataContext 设置为多个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50365182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com