WPF DataGrid要素でSelectionChangedイベントを処理して、ユーザーの操作や選択のみを行いたい場合はバインディングやその他の設定値が原因でスキップします。選択がユーザーのやりとりによって変更されるかどうかをどのように判断するか考えていますか?または同様のタスクを行う代替イベントですか?WPFのSelectionChangedイベントは、ユーザーとのやりとりのためだけに処理できますか?
答えて
おそらくSelectionChanged
イベントとPreviewMouseDown
イベントを組み合わせてみてください。ユーザーが行をクリックするといくつかのプロパティが設定され、SelectionChanged
イベントハンドラはプロパティが変更されたかどうかをチェックします。
サンプルコードのXAML:背後
<DataGrid SelectionChanged="OnSelectionChanged" PreviewMouseDown="OnPreviewMouseDown">
<!--some code-->
</DataGrid>
コード:
bool isUserInteraction;
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (isUserInteraction)
{
//some code
isUserInteraction = false;
}
}
private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
isUserInteraction = true;
}
Rafalさん、ありがとう、そのトリックは助けました。ありがとうございました! –
誰もが理由を考えることができます、なぜこれは別のイベントとして実装されていない...? MVVM-Patternを使用すると、datacontextを設定しても変更は常に発生します。:/ +1このトリックのためのRafal:) – dba
これは多くの場合に失敗すると思います:(1)ユーザーが(例えば、すでに選択されている行をクリックしたり、修飾子や異なるマウスボタンを使用するなど)、バインディングのために選択が変更された場合、バインディングはユーザーアクションとして認識されます。 (2)ユーザがキーボードを使用して選択を変更した場合、それはユーザアクションとしては見えません。 – hypehuman
ハイテクXAMLでこれを使用することができます:
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!((ComboBox)sender).IsEditable) return;
//Do Stuff;
}
:背後
<ComboBox x:Name="ComboBoxName" SelectionChanged="ComboBox_SelectionChanged">
<ComboBox.Style>
<Style TargetType="ComboBox">
<Style.Triggers>
<Trigger Property="IsDropDownOpen" Value="True">
<Setter Property="IsEditable" Value="True"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
とコードでの0
もう1つの方法は、ComboBoxのDropDownOpened
イベントとDropDownClosed
イベントを処理することです。これは、ユーザがComboBoxをクリックして他の場所をクリックした場合に、ComboBoxを選択せずに閉じるようにした場合、ブール値フラグが真となるのを防ぐので、Rafalの受け入れられた答えよりもわずかに優れています。ただし、ComboBoxにキーボードフォーカスがあり、ユーザーが選択を変更するために上下の矢印をタップすると、解決できないことがあります。
private void Event_ComboBox_DropDownOpened(object sender, EventArgs e)
{
isUserInteraction = true;
}
private void Event_ComboBox_DropDownClosed(object sender, EventArgs e)
{
isUserInteraction = false;
}
private void Event_ComboBox_SelectedChanged(object sender, SelectionChangedEventArgs e)
{
if (isUserInteraction)
{
// Do work
}
}
- 1. Python Matplotlibイベント処理:パン/ズームとのやり取り
- 2. wpfでMVVMを使用してComboBoxのSelectionChangedイベントを処理する方法は?
- 3. datagridviewでselectchangedイベントを処理すると、C#datagridview selectionchangedイベントエラー
- 4. WPF Datagrid:SelectionUnit = "Cell"のときにSelectionChangedイベントが発生しない
- 5. base.ItemAdded(プロパティ)とは何ですか;イベント処理コードのために
- 6. WPFラジオボタンとテキストボックス - イベント処理
- 7. Zオーダーとイベント処理wpf
- 8. WPFでのイベント処理
- 9. オブジェクトのやりとりを理解するためのテクニックは何ですか?
- 10. WPFのModelVisual3Dオブジェクトとのやりとり
- 11. WPFユーザーコントロールのイベントの処理
- 12. WinFormイベントを処理するための流暢なアプローチはありますか?
- 13. WPFウィンドウでのユーザーのやりとりを正確にタイミングする
- 14. 弊社のウェブサイトでユーザーとサブスクリプションを管理するための良いソフトウェアやスクリプトはありますか?
- 15. ソーシャルメディアとやりとりするためのライブラリはありますか?
- 16. バインドされたキャンバスWPFのイベント処理
- 17. ios-chartsとのユーザーのやりとり
- 18. ASP.NET Textbox TextChangedとButton OnClickイベントのやりとりですか?
- 19. Springはこのユーザー・ケースを処理できますか?プロパティやコンストラクタの注入はありません
- 20. MVVMでコンボボックスSelectionChangedをどのように処理しますか?
- 21. ユーザーとJavaScriptとのやり取り
- 22. Alamofireを使用してダウンロードした後、セグを待つ間にユーザーのやりとりを処理する
- 23. 単一のイベントでマルチタッチとマウスイベントを処理する-WPF
- 24. いくつかの行だけを切り取り、他の行は未処理のままにしておくことはできますか?
- 25. メモリリークを避けるために、イベントを適切に処理する方法はありますか?
- 26. ユーザーがiOSでスライダーとやりとりしたときにスクロールしないでください
- 27. meteor jsのクライアントとサーバー側のやりとりの処理に問題があります
- 28. IEとクライアントサイドのイベント処理におけるホストされたユーザーコントロール
- 29. WPF:ユーザーが閉じるボタン[X]を押したときに発生するイベントはありますか?
- 30. PyQTのコンボボックスはユーザーとのやりとりにのみ反応します
達成しようとしているサンプルコードを表示できますか? –