如何在对象类的嵌套值更改上触发属性更改?

我有一个全局类,可以通过WPF页面/窗口进行访问。窗口中的元素已绑定到datacontext。初次加载时,播放器1的值可以显示为“ 10”,但是当我按下按钮并增大值时,没有任何更新

这是stackpanel父级中的第一个堆栈子级:-

<StackPanel x:Name="Stage1_Player1_Stack" DataContext="{Binding Stage1_Player1}" Margin="0,15,0">
    <TextBlock Margin="0,5" FontSize="16" FontWeight="Bold">Player 1</TextBlock>
    <materialDesign:Card x:Name="Stage1_Player1_Card" VerticalAlignment="Stretch" FontWeight="Bold" FontSize="16">
        <TextBlock x:Name="Stage1_Player1_Number" TextWrapping="Wrap" TextAlignment="Center" Text="{Binding Stage1Data.SelectedNumber,UpdateSourceTrigger=Explicit}" Padding="10" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" FontWeight="Bold" Margin="0,5"/>
    </materialDesign:Card>
</StackPanel>
<!-- There will be more than 1 stack at max 10 players-->

在新窗口实例上,我将初始化值(将从数据库中检索值。为了进行测试,我进行了硬编码):-

public MainWindow()
{
    InitializeComponent();
    GetPlayerData();
    DataContext = new
    {
        Stage1_Player1 = GlobalData.Player1Data,};

}
public void GetPlayerData()
{
    GlobalData.Player1Data = new Player
    {
        Stage1Data = new Stage1
        {
            SelectedNumber = "10"
        }
    };
}
private void BtnNext_Click(object sender,RoutedEventArgs e)
{
    int value = Convert.ToInt32(GlobalData.Player1Data.Stage1Data.SelectedNumber);
    GlobalData.Player1Data.Stage1Data.SelectedNumber = (value + 1).ToString();

    System.Windows.Data.BindingExpression binding = Stage1_Player1_Number.GetBindingExpression(TextBlock.TextProperty);
    binding.UpdateSource();
}

这是我的全局类文件,在其中我坚持如何实现PropertyChanged:-

public class GlobalData : INotifyPropertyChanged
{
    public static Player Player1Data { get; set; }
    public static Player Player2Data { get; set; }
    public static Player Player3ata { get; set; }
    public static Player Player4Data { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void NotifyPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] String propertyName = "")
    {
        PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
    }

}
public class Player
{
    public Stage1 Stage1Data { get; set; }
    public Stage2 Stage2Data { get; set; }
    public Stage3 Stage3Data { get; set; }
    public Stage4 Stage4Data { get; set; }
}
public class Stage1
{
    public string SelectedNumber { get; set; }
}
public class Stage2
{
    public string SelectedNumber { get; set; }
    public string TotalAnswer { get; set; }
}
public class Stage3
{
    public string SelectedNumber { get; set; }
    public string Guessnumber { get; set; }
    public string CurrentPoint { get; set; }
    public string TotalAnswerCorrect { get; set; }
}
public class Stage4
{
    public string SelectedNumber { get; set; }
    public List<string> NumberSelectionList { get; set; }
}

如何让绑定文本块知道SelectedNumber的值已更改?

我尝试从Bind value from one class to another value in another classImplementing INotifyPropertyChanged for nested properties进行引用,但是我对绑定事物完全不了解,因此我无法猜测使之适用于对象类的方法。我以前只在同一页面上更改过属性,但从未像现在这样尝试过对象类。

已编辑

公共静态类GlobalData

public static Player Player1Data
{
    get => _Player1Data;
    set
    {
        _Player1Data = value;
        OnStaticPropertyChanged("Player1Data");
    }
}
private static Player _Player1Data { get; set; }
public static event PropertyChangedEventHandler StaticPropertyChanged;
private static void OnStaticPropertyChanged(string propertyName)
{
    StaticPropertyChanged?.Invoke(null,new PropertyChangedEventArgs(propertyName));
}

XAML:-

<TextBlock x:Name="Stage1_Player1_Number" Text="{Binding Path=Player1Data.Stage1Data.SelectedNumber}"/>
gaoshan254000 回答:如何在对象类的嵌套值更改上触发属性更改?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3103586.html

大家都在问