0

TextBoxes単一の にバインドされているものがいくつかありCheckBoxます。

これに関連するロジックは次のとおりです。

  • がチェックされている場合Checkbox、関連付けられている既存のテキストを上書きしTextBoxesて '0' ++にします。
  • すべてのTextBoxesスコアが「0」のCheckBox場合は、無効にしてオンにする必要があります。
  • その後のいずれかがTextBoxes「0」から変化すると、有効になり、チェックが解除されます。

++ *注: * これに対する警告TextBoxは、 の値が「C」の場合です。

TextBoxesさて、私が抱えている問題は、関連付けられているものの 1 つが「C」の値を持っている場合に、上記の警告を実装することです。私が望んでいるのは、 をループして、TextBoxes「C」と評価されたものがあるかどうかを確認することです。見つかった場合は、続行するかどうかを確認する警告メッセージをユーザーに表示します。[はい] を選択すると、関連するすべてのスコアが「0」に上書きされます。いいえを選択した場合、Checkedイベントはキャンセルされます。

CheckBox.PreviewMouseDownこれを実現するために、およびイベントのイベント リスナーを追加しましたCheckBox.Checked。これが私のCheckBox.PreviewMouseDownイベントリスナーのコードです:

private void NormalCheckBoxControl_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    CheckBox normalCheckBox = (CheckBox)sender;
    bool showCorrespondingScoreWarningMsg = false;

    //Get a Row to loop through the AssociatedAdqScore controls for each
    ScoreControl tempScoreControl = new ScoreControl();

    foreach (ScoreControl score in this.ScoreControlList)
    {
        if (score.ScoreTextBox.Text == "C")
        {
            showCorrespondingScoreWarningMsg = true;
        }
    }

    if (showCorrespondingScoreWarningMsg)
    {
        MessageBoxResult msgResult = InformationBox.Show("WARNING: Proceeding will remove corresponding 'C' scores.  Continue?", "Continue?", ButtonStyle.YesNo, IconStyle.Question);

        if (msgResult == MessageBoxResult.No)
        {
            e.Handled = true;
        }
    }
}

これは、ユーザーが「いいえ」を選択した場合に機能しますが、「はい」を選択してもCheckBox.Checkedイベントが発生しないという問題があります。CheckBox.IsChecked = true;ifを手動で設定しようとしましif (msgResult == MessageBoxResult.Yes)たが、これはバインディングを壊すため、実行可能な解決策ではありません。

NormalCheckBoxControl_Checked(object sender, RoutedEventArgs e)ユーザーが [はい] を選択した場合、この問題を解決してイベントを続行する方法はありますか?

4

1 に答える 1

1

CheckedChangedイベントとイベントはありますが、「チェック済み」イベントはわかりませんCheckStateChanged。私は .NET 2.0 に慣れているので、これは 3.0 以降のものかもしれません。いずれにせよ、このようなインスタンスでは問題なく手動でイベント ハンドラーを呼び出したと思います。

null パラメーター (または既知のオブジェクトと新しいイベント引数) を使用して、イベント ハンドラーを手動で呼び出すことができます。

NormalCheckBoxControl_Checked(null, null);

また

NormalCheckBoxControl_Checked(new object, new EventArgs());

これはルーチンを手動で開始する必要があり、それらが必要でない限り、ダミーのパラメーターを提供しても問題はありません。イベントを発生させてバブリングするのを待つ必要はありません。ルーチンを呼び出すだけです。

もちろん、イベント バブリングに依存する他のルーチンがある場合、または同じイベントに対して複数のハンドラーがある場合は、問題が発生する可能性があります。念のため、その点はご承知おきください。

于 2013-01-21T21:08:18.097 に答える