2

私は高パフォーマンスのブラックジャック プログラムに取り組んでいます。アプリケーションは主に表示用ですが、パフォーマンス上の理由からすべてのインターフェイスの更新を無効にしたい場合があります。UI を更新すると (自動的に 100% バインディングで)、テーブルとコントロールを更新せずに 1 秒あたり 22,000 枚以上のカードを配ることができます。

UI の更新を無効にする簡単な方法をいじっています。私が見つけた唯一の方法は、BlackJackTable UserControls の DataContext を空のテーブル ViewModel の DataContext に設定し、実際のテーブル 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 を呼び出していますが、ボックスがチェックされていない場合、すべてがうまく機能します。このコードは何らかの理由で機能しません。

4

1 に答える 1

3

私の考えは、イベントが呼び出されない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);
}
于 2012-05-07T02:07:16.273 に答える