0

observableCollectionC# コードにプロパティがありComboBox、この観察可能なコレクションにバインドされています。

<ComboBox x:Name="CameraInstances" Margin="10,0,0,0" Width="250" StaysOpenOnEdit="True" VerticalAlignment="Center" VerticalContentAlignment="Center"
                                   ItemsSource="{Binding Path=CameraSettingsManager.Observable, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
                                   SelectedIndex="{Binding Path=CameraSettingsManager.EditingCameraIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                   SelectionChanged="CameraInstances_OnSelectionChanged" DisplayMemberPath="Name"  
                                   IsSynchronizedWithCurrentItem="True"
                                   Height="30"/>

またComboBox、これのフィルターとして機能する別のものがありSelectionChanged、選択したフィルターに従って監視可能なコレクションと広告の新しいアイテムをクリアします。

public void Load(ObservableCollection<Object> objects, CameraBehavior behavior)
{
    try
    {
        objects.Clear();

        if (behavior == CameraBehavior.Undefined)
        {
            if (firstPersonCameraContainer.Count > 0)
            {
                 foreach (KeyValuePair<string, FirstPersonCamera> camera in firstPersonCameraContainer)
                 {
                     objects.Add(camera);
                 }
             }

             if (thirdPersonCameraContainer.Count > 0)
             {
                 foreach (KeyValuePair<string, ThirdPersonCamera> camera in thirdPersonCameraContainer)
                 {
                     objects.Add(camera);
                 }
             }

             if (flightCameraContainer.Count > 0)
             {
                 foreach (KeyValuePair<string, FlightCamera> camera in flightCameraContainer)
                 {
                     objects.Add(camera);
                 }
             }
         }
         else if (behavior == CameraBehavior.FirstPerson)
         {
             if (firstPersonCameraContainer.Count > 0)
             {
                 foreach (KeyValuePair<string, FirstPersonCamera> camera in firstPersonCameraContainer)
                 {
                     objects.Add(camera);
                 }
             }
         }
         else if (behavior == CameraBehavior.ThirdPerson)
         {
             if (thirdPersonCameraContainer.Count > 0)
             {
                 foreach (KeyValuePair<string, ThirdPersonCamera> camera in thirdPersonCameraContainer)
                 {
                     objects.Add(camera);
                 }
             }
         }
         else
             if (behavior == CameraBehavior.Flight)
             {
                 if (flightCameraContainer.Count > 0)
                 {
                     foreach (KeyValuePair<string, FlightCamera> camera in flightCameraContainer)
                     {
                         objects.Add(camera);
                     }
                 }
             }
         }

         catch (Exception e)
         {
             MessageBox.Show(e.Message + e.StackTrace + e.TargetSite);
         }
     }
}

しかし、実際にはコレクションが更新された後は失われComboBoxているようです。誰かが理由を知っていますか?ComboBoxItemsSource

4

1 に答える 1

0

申し訳ありませんが、問題は自分で解決しました。実際には、コレクションに間違ったタイプを追加したためです(具体的なタイプではなく辞書)。

于 2013-06-26T09:57:54.700 に答える