C#,WPF绑定,MVVM,INotifyPropertyChanged,尝试绑定实例属性但没有成功

时间:2015-10-14 15:54:40

标签: c# wpf xaml mvvm inotifypropertychanged

有没有办法将类的实例放在另一个类中,然后使用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,无论我是否将上下文设置为命名实例。

1 个答案:

答案 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类绑定到我的窗口会给我一个红色和黑色的文本块背景。