iv'e получил 2 элемента управления элементов, связанных с 2 наблюдаемыми коллекциями
my ItemsControls:
<ItemsControl Grid.Column="4" Name="Pipe19" ItemsSource="{Binding Path=Pipes[19].Checkers}" Style="{StaticResource ItemsControlStyle}" ItemsPanel="{StaticResource TopPipePanelTemplate}" />
<ItemsControl Grid.Column="5" Name="Pipe18" ItemsSource="{Binding Path=Pipes[18].Checkers}" Style="{StaticResource ItemsControlStyle}" ItemsPanel="{StaticResource TopPipePanelTemplate}" />
их определения через стиль:
<Style TargetType="{x:Type ItemsControl}" x:Key="ItemsControlStyle">
<Setter Property="ItemTemplate" Value="{StaticResource PipeDataItem}"></Setter>
<Setter Property="AllowDrop" Value="True"></Setter>
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ItemsControl_MouseLeftButtonDown"></EventSetter>
<EventSetter Event="Drop" Handler="ItemsControl_Drop"></EventSetter>
</Style>
оба считаются объектами выпадения, они содержат элементы эллипса, которые мне нужно перетащить из одного в другое.проблема заключается в том, что операция добавления части не отображается в пользовательском интерфейсе.
Visual Helper:
при перетаскиванииперетащите в виде эллипса справа налево:
- это код, который захватывает эллипс и сохраняет управление исходным кодом
private void ItemsControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
ItemsControl control = (ItemsControl)sender;
UIElement element = control.InputHitTest(e.GetPosition(control)) as UIElement;
if (element != null)
{
Ellipse ellipse = element as Ellipse;
DragSource = control;
DragDrop.DoDragDrop(ellipse, ellipse, DragDropEffects.Copy);
}
}
этокод, где эллипс перетаскивается на его цель:
private void ItemsControl_Drop(object sender, DragEventArgs e)
{
ItemsControl target = (ItemsControl)sender;
Ellipse ellipse = (Ellipse)e.Data.GetData(typeof(Ellipse));
((ObservableCollection<Checker>)DragSource.ItemsSource).Remove(ellipse.DataContext as Checker);
((ObservableCollection<Checker>)target.ItemsSource).Add(ellipse.DataContext as Checker);
}
коллекции Checkers описываются следующим образом: (Обратите внимание, что они являются itemscontrols ItemsSource:
public class Pipe
{
private ObservableCollection<Checker> checkers;
public ObservableCollection<Checker> Checkers
{
get
{
if (checkers == null)
checkers = new ObservableCollection<Checker>();
return checkers;
}
}
}
после события ItemsControl_Drop результат состоит в том, что только удаление обновило пользовательский интерфейс, но добавление в целевое добавление не произошло (я ожидаю, что в левом элементе появится новый элемент, который я назвал Добавить, на его ресурс:
Другая визуальная помощь:
Есть идеи?