所以我刚刚进入数据绑定& MVVM和我在这件事上遇到了一个小问题。
我有一个名为Player
在我的MainWindow
课程中,我将DataContext
设置为该Player
课程的实例
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
<TextBox Name="TbName" HorizontalAlignment="Left" Height="23" Margin="243,119,0,0" TextWrapping="Wrap" Text="{Binding Path=Firstname}" VerticalAlignment="Top" Width="120"/>
现在..让我们说我有另一个叫做我不知道的课程.Acheivments ..
如何将另一个控件的Text
设置为该类的属性?我必须设置另一个DataContext
,我不知道如何设置多个datacontexts。
问题: 如何正确设置两个datacontexts,以便将不同的类绑定到不同的控件?
答案 0 :(得分:5)
您只能将DataContext
属性设置为单个对象,但此对象的类型可能包含您可以绑定到的多个属性:
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}" />
答案 1 :(得分:-3)
最好你创建不同的列表如下:
public ObservableCollection<Player> ListOne = new ObservableCollection<Player>();
之后,用您的值填充此列表。
现在你需要在XMAL中为你的TextBox提供一个带有类播放器的DataTemplate。
<TextBox.ItemTemplate>
<DataTemplate x:DataType="data:Bilder">
//Whatever you want to bind here.
</DataTemplate>
</TextBox.ItemTemplate>
最后,您可以将不同的列表绑定到不同的控件。
TbName.source = ListOne;