【发布时间】:2012-05-07 01:53:53
【问题描述】:
我正在开发一个高性能的 BlackJack 程序。该应用程序主要用于展示,但有时出于性能原因我想禁用所有界面更新。当我更新 UI 时(自动 100% 绑定),我每秒可以发约 600 张牌,而无需更新表格和控件,我每秒可以发 22,000 多张牌。
我正在尝试禁用 UI 更新的简单方法。我发现的唯一方法是将我的 BlackJackTable UserControls 的 DataContext 设置为空白表 ViewModel 并允许真实表 ViewModel 执行所有计算。如果我想再次查看发生了什么,这会在将 DataContexts 设置回真实表 ViewModel 时产生问题。
所以,总而言之...有没有一种简单的方法可以暂停对象上的所有绑定?删除可见性和禁用 (IsEnabled = false) 对性能没有帮助。有什么建议可以正确地做到这一点吗?
您不需要阅读以下内容,但如果您好奇(或有解决方案),这就是我一直在做的事情:
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 拉取。我正在调用 OnPropertyChanged,如果没有选中该框,一切都会很好。此代码由于某种原因不起作用。
【问题讨论】: