8

このエラーを見つけるのを手伝ってもらえますか: イベントは、Windows フォームが読み込まれる前にトリガーされます。メッセージ ボックスが表示され始め、[OK] をクリックすると、メイン画面がロードされます。その後、すべてが完全に機能します。ウィンドウをロードする前に、何が ComboBox SelectionChanged イベントをトリガーするのだろうかと思います。FillComboBoxFamilyData(SegmentCode) はデータセットを作成するだけです値を ComboBox に入れます。完全なコードについては、このリンクを参照してください。

カスケード コンボボックスを機能させることができない

どんな助けでも大歓迎です.Thanks.

 <ComboBox Height="23" HorizontalAlignment="Left" Margin="35,26,0,0" Name="comboBox1" VerticalAlignment="Top" Width="205" ItemsSource="{Binding Source={StaticResource tblSegmentViewSource}}"  DisplayMemberPath="Segment Name" SelectedValuePath="Segment Code" SelectionChanged="comboBox1_SelectionChanged"/>
 <ComboBox Margin="304,26,395,93" Name="comboBox2" />


    private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        MessageBox.Show(comboBox1.SelectedValue.ToString());
        SegmentCode = Convert.ToInt32(comboBox1.SelectedValue.ToString());
        FillComboBoxFamilyData(SegmentCode);

    }
4

4 に答える 4

16

データがロードされる(バインディングによってアタッチされる)時点で、SelectionChangedが発生します。したがって、アプリの準備ができており、すべてのデータが読み込まれて添付されているかどうかをイベントハンドラーで確認する必要があります。そうでない場合は、何もせずにイベントハンドラーを返します。この動作は仕様によるものです。

ItemsSource="{Binding Source={StaticResource tblSegmentViewSource}}"  

-propertyを使用してIsLoaded、バインディングがすでに評価されているかどうかを検出できます。IsLoadeddatabinding-engineがxaml-bindingsを評価しない限り、trueにはなりません。

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)     { 
   if(!IsLoaded){
      return;
   }
   .... your code here
于 2011-02-16T21:28:19.233 に答える
4

コンボ ボックスの IsLoaded プロパティを使用して、まだ読み込まれているかどうかをテストできます。これは私が見つけることができる最もクリーンで簡単な解決策です:

var comboBox = (ComboBox)sender;
if (!comboBox.IsLoaded)
{
    // This is when the combo box is not loaded yet and the event is called.
    return;
}
于 2016-10-12T22:28:55.720 に答える
2

これは古い質問であることは知っていますが、プロジェクトでこれを修正しようとして2回遭遇し、OPと同じ結果になりました。IsLoaded が true になると、リストにデータが入力されます。だから、私は他の人のために私が考え出したものを投稿することにしました. DropDowOpened イベントを使用して bool を true に設定するだけです。このようにして、ユーザーが実際にドロップダウンをクリックするまで、SelectionChanged イベントは発生しません。

private bool UserSeriesChange;
private void comboBox1_DropDownOpened(object sender, EventArgs e)
{
        UserSeriesChange = true;    
}

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{ 
   if(!UserSeriesChange){
      return;
   }
   .... your code here
于 2016-05-22T22:55:40.043 に答える