我有一个全局类,可以通过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 class,Implementing 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}"/>