有没有办法将类的实例放在另一个类中,然后使用INotifyPropertyChanged从它们更新UI?例如,WhiteJack类中的这些PlayerBaseClass实例PlayerOne和PlayerTwo,并在UI中更新它们?唯一有效的解决方案是将上下文直接设置为播放器的实例,然后将它们提供给作为主视图模型的viewmodel ..!
class MultipleDataContexts
{
public WhiteJack WhiteJackViewModel { get; set; }
public PlayerBaseClass PlayerOne { get; set; }
public PlayerBaseClass PlayerTwo { get; set; }
public MultipleDataContexts()
{
PlayerOne = new PlayerBaseClass();
PlayerTwo = new PlayerBaseClass();
WhiteJackViewModel = new WhiteJack(PlayerOne, PlayerTwo);
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
this.DataContext = new MultipleDataContexts(); // set datacontext for the INotifyPropertyChanged
InitializeComponent();
this.WindowState = WindowState.Maximized; //Window to the max.
}
}
我猜这是唯一有效的方法。 View必须直接看到设置的上下文,它无法看到它的成员。我对吗?因为这不起作用:
this.DataContext = new WhiteJack();
是的,没有。我无法通过将文本块绑定到WhiteJack中的实例来更新UI,无论我是否将上下文设置为命名实例。
答案 0 :(得分:1)
您正在为此(窗口)将DataContext设置为新的WhiteJack()实例。我仍然不确定你的最终目标是什么,但在MultipleDataContexts类中实例化你的两个PlayerBaseClass对象将允许你使用你创建的属性设置背景。因此,在ViewModel中设置颜色:
MODEL
class MultipleDataContexts
{
public PlayerBaseClass PlayerOne { get; set; }
public PlayerBaseClass PlayerTwo { get; set; }
public MultipleDataContexts()
{
PlayerOne = new PlayerBaseClass();
PlayerTwo = new PlayerBaseClass();
}
}
视图模型
MultipleDataContexts mdc = new MultipleDataContexts();
mdc.PlayerOne.TextBlock_Background = new SolidColorBrush(Colors.Red);
mdc.PlayerTwo.TextBlock_Background = new SolidColorBrush(Colors.Black);
this.DataContext = mdc;
XAML
<TextBlock x:Name="SeatOne_TextBlock" HorizontalAlignment="Left" Text="text" Background="{Binding PlayerOne.TextBlock_Background}" VerticalAlignment="Top" Opacity="1" Height="155" Width="105" FontFamily="Courier New" Padding="0" Margin="0" />
<TextBlock x:Name="SeatTwo_TextBlock" HorizontalAlignment="Left" Text="text" Background="{Binding PlayerTwo.TextBlock_Background}" VerticalAlignment="Top" Opacity="1" Height="155" Width="105" FontFamily="Courier New" Padding="0" Margin="0" />
设置这些属性并将MultipleDataContexts类绑定到我的窗口会给我一个红色和黑色的文本块背景。