Я пытаюсь создать UserControl, который включает 2 списка. Затем я не хочу устанавливать itemsSources для списков, в которых я использую UserControl.
Насколько я понимаю, для этого DependencyProperties
. Однако я не преуспел в этом. Я верю, что это в основном связано со временем инициализации. Любой указатель на то, что я делаю правильно, как я могу сделать это лучше, и такое приветствуется.
Вот мой пользовательский элемент управления, я учусь по ходу дела, так что, думаю, я мог бы сделать это лучше
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<ListBox Name="SET" ItemsSource="{Binding Path=SetCollection}" />
<UniformGrid Rows="4" Grid.Column="1">
<Grid />
<Button Margin="10" Click="selectionBtnClick">--></Button>
<Button Margin="10" Click="removeBtnClick">Remove</Button>
</UniformGrid>
<ListBox Name="SUBSET" ItemsSource="{Binding Path=SubsetCollection}" Grid.Column="2" />
</Grid>
CodeBehind
public partial class SubsetSelectionLists : UserControl
{
public static DependencyProperty SetCollectionProperty = DependencyProperty.Register("SetCollection", typeof(CollectionView), typeof(SubsetSelectionLists));
public static DependencyProperty SubsetCollectionProperty = DependencyProperty.Register("SubsetCollection", typeof(CollectionView), typeof(SubsetSelectionLists));
public CollectionView SetCollection
{
get
{
return (CollectionView) GetValue(SetCollectionProperty);
}
set
{
SetValue(SetCollectionProperty, value);
}
}
public CollectionView SubsetCollection
{
get
{
return (CollectionView)GetValue(SubsetCollectionProperty);
}
set
{
SetValue(SubsetCollectionProperty, value);
}
}
public SubsetSelectionLists()
{
InitializeComponent();
}
private void selectionBtnClick(object sender, RoutedEventArgs e)
{
SUBSET.Items.Add(SET.SelectedItem);
}
private void removeBtnClick(object sender, RoutedEventArgs e)
{
SUBSET.Items.Remove(SUBSET.SelectedItem);
}
}
И код где я его использую
public partial class SomeWindow : Window
{
ViewModel vm = new ViewModel();
public SomeWindow()
{
InitializeComponent();
NameOfUserControl.SetCollection = vm.InputView;
NameOfUserControl.SubsetCollection = vm.OutputView;
}
}
Здесь SetCollection устанавливается как inputView, а затем привязывается к свойству DependencyProperty, разрывая исходную привязку, я думаю. Любая идея, где я иду не так?
Ps. подвопрос - Поскольку я буду перемещаться из одной коллекции в другую, разве я не должен гарантировать, что коллекция удерживает объекты одного и того же типа? Как я мог это сделать?