Я работаю над созданием элемента управления CheckedComboBox WPF. Я хочу добавить SelectedValuesProperty, через который я мог бы связать через XAML. Я пробовал несколько разных вещей и пока не смог заставить его работать. У кого-нибудь есть какие-либо предложения о том, как подойти к этому? Мой контроль наследуется от MultiSelector. Заранее спасибо!
Это то, что у меня до сих пор, проблема в том, что я не могу получить предметный контейнер от объекта:
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;
}
}
}