0

CheckedComboBoxWPFコントロールの作成に取り組んでいます。XAMLを介してバインドできるSelectedValuesPropertyを追加したいと思います。私はいくつかの異なることを試しましたが、まだそれを機能させることができませんでした。誰かがこれにアプローチする方法について何か提案がありますか?私のコントロールはMultiSelectorから継承します。前もって感謝します!

これは私がこれまでに持っているものです、問題は私がオブジェクトからitemcontainerを取得できないことです:

public static readonly DependencyProperty SelectedValuesProperty = DependencyProperty.Register( 
  "SelectedValues", typeof( IEnumerable ), typeof( CheckedComboBox ),
      new FrameworkPropertyMetadata( ( IEnumerable ) null,
        new PropertyChangedCallback( OnSelectedValuesChanged ) ) );

private static void OnSelectedValuesChanged( DependencyObject d, DependencyPropertyChangedEventArgs e )
{
  CheckedComboBox combo = ( CheckedComboBox ) d;
  IEnumerable oldValue = ( IEnumerable ) e.OldValue;
  IEnumerable newValue = ( IEnumerable ) e.NewValue;

  // unselect all the old vlaues
  if ( oldValue != null )
  {
    foreach ( object obj in oldValue )
    {
      CheckedComboBoxItem item = obj as CheckedComboBoxItem;
      if ( item == null )
        item = combo.ItemContainerGenerator.ContainerFromItem( obj ) as CheckedComboBoxItem;
      if ( item != null && item.IsEnabled && item.IsSelected )
        item.IsSelected = false;
    }
  }

  // select all the new values
  if ( e.NewValue != null )
  {
    foreach ( object obj in newValue )
    {
      CheckedComboBoxItem item = obj as CheckedComboBoxItem;
      if ( item == null )
        item = combo.ItemContainerGenerator.ContainerFromItem( obj ) as CheckedComboBoxItem;
      if ( item != null && item.IsEnabled && !item.IsSelected )
        item.IsSelected = true;
    }
  }
}
4

1 に答える 1

0

私はこの同じ問題を理解しようとしています。SelectedValuePath と組み合わせて使用​​する SelectedValues (SelectedItems ではない) が必要です。これにより、オブジェクトの Collection を渡す場合に、それらのオブジェクトのプロパティを指定して、返された値を使用できます。SelectedValues は、値のコレクションを返します。

于 2011-01-07T20:20:03.207 に答える