C# 如何在WPF中暂停绑定的UI更新?
我正在做一个高性能的21点程序。该应用程序主要用于显示,但有时出于性能原因,我想禁用所有界面更新。当我更新UI(自动100%绑定)时,我可以每秒处理约600张卡,在不更新表格和控件的情况下,我可以每秒处理22000多张卡 我在玩弄禁用UI更新的简单方法。我找到的唯一方法是将BlackJackTable UserControls的DataContext设置为空白表ViewModel的DataContext,并允许真实的表ViewModel执行所有计算。如果我想再次观察发生了什么,那么在将DataContext设置回真实的表ViewModel时就会出现问题 总之。。。有没有一种简单的方法可以挂起对象上的所有绑定?删除可见性和禁用(IsEnabled=false)无助于提高性能。有什么建议可以用正确的方法来做吗 你不需要阅读下面的内容,但如果你很好奇(或有解决方案),以下是我一直在做的事情:C# 如何在WPF中暂停绑定的UI更新?,c#,wpf,binding,viewmodel,C#,Wpf,Binding,Viewmodel,我正在做一个高性能的21点程序。该应用程序主要用于显示,但有时出于性能原因,我想禁用所有界面更新。当我更新UI(自动100%绑定)时,我可以每秒处理约600张卡,在不更新表格和控件的情况下,我可以每秒处理22000多张卡 我在玩弄禁用UI更新的简单方法。我找到的唯一方法是将BlackJackTable UserControls的DataContext设置为空白表ViewModel的DataContext,并允许真实的表ViewModel执行所有计算。如果我想再次观察发生了什么,那么在将DataC
private void FastModeChk_Checked(object sender, RoutedEventArgs e) {
if (TableViewModel.GameStatisticsVM.CardsDealt > 0) {
BlackJackTable.DataContext = BlankTVM;
DealerControlsTabItem.DataContext = BlankTVM;
PlayerControlsTabItem.DataContext = BlankTVM.CurrentPlayerHandVM;
DebugLogTabItem.DataContext = BlankTVM.LoggingVM;
}
}
private void FastModeChk_Unchecked(object sender, RoutedEventArgs e) {
BlackJackTable.DataContext = TableViewModel;
DealerControlsTabItem.DataContext = TableViewModel;
PlayerControlsTabItem.DataContext = TableViewModel.CurrentPlayerHandVM;
DebugLogTabItem.DataContext = TableViewModel.LoggingVM;
}
PlayerControlsTabItem不会一直从CurrentPlayerHandVM中提取。我正在打电话给PropertyChanged,如果这个框没有被选中,一切都会很好。由于某些原因,此代码不起作用。我的想法是在
RaisePropertyChanged()
方法调用中设置短路,以便不调用PropertyChanged
事件
比如:
private int _myInt;
public int MyInt
{
get { return _myInt; }
set
{
if(_myInt == value)
return;
_myInt = value;
RaisePropertyChanged("MyInt");
}
}
private void RaisePropertyChanged(string propertyName)
{
//if the fastmode is checked, do not allow the PropertyChanged event to be fired.
if(FastModeChk.Checked)
return;
var handler = PropertyChanged;
if(handler != null)
handler(this, new PropertyChangedEventArgs(propertyName);
}
我也想过这个。我确信开销是很小的,但是很小的开销(小到1%)仍然意味着22000卡/秒和21500卡/秒之间的差异。就算这没什么大不了的,如果没有更优雅的解决方案,我可能会在这里结束。谢谢你的意见!我认为开销很小,远低于1%。我预计这可能会给物业变更增加1ns。你不太可能编写一个程序,让它发挥作用。我现在就来实现它,如果一切顺利,没有其他答案,我会把它标记为已接受的答案!再次感谢阿拉斯泰尔和盖布。