Я пытаюсь сделать перетаскивание на WPF, используя MVVM
Я нашел эту ссылку от Bea Stollnitz http://bea.stollnitz, которая предлагает решение
с помощью DragDropHelper здесь: bea.stollnitz.com/files/46/DragDropListBox.zip
но когда я пытаюсь настроить его с помощью некоторых компонентов, генерирующих события, таких как кнопка или радио-кнопка в табличке с данными, у меня появляется эта ошибка при перетаскивании
"Невозможно получить доступ к украшателям на элементе, который не имеет украшателей."
в этой строке
this.adornerLayer.Update (this.AdornedElement);
Вы можете легко воспроизвести его, загрузив bea.stollnitz.com/files/46/DragDropListBox.zip
и замена
<DataTemplate x:Key="pictureTemplate">
<DataTemplate.Resources>
<Style TargetType="Image">
<Setter Property="Width" Value="50" />
<Setter Property="Height" Value="50" />
<Setter Property="Margin" Value="10" />
</Style>
</DataTemplate.Resources>
<Image Source="{Binding Path=Location}" />
</DataTemplate>
по
<DataTemplate x:Key="pictureTemplate">
<DataTemplate.Resources>
<Style TargetType="Image">
<Setter Property="Width" Value="50" />
<Setter Property="Height" Value="50" />
<Setter Property="Margin" Value="10" />
</Style>
</DataTemplate.Resources>
<Grid>
<Image Source="{Binding Path=Location}" />
<RadioButton />
</Grid>
</DataTemplate>
т.е. добавление радиокнопки в шаблон
Я уже нашел несколько ссылок, но ни одна из них не объясняет ясного способа решения проблемы.
Нет событий, переданных на слой рекламодателя WPF
которые предлагают добавить этот код
VisualCollection visualChildren;
FrameworkElement @object;
public CustomAdorner(UIElement adornedElement) :
base(adornedElement)
{
visualChildren = new VisualCollection(this);
@object = new Button {Content = "prova"};
visualChildren.Add(@object);
}
protected override Visual GetVisualChild(int index)
{
return visualChildren[index];
}
но я уверен, где добавить его и то же самое для этой ссылки
http://social.msdn.microsoft.com/Forums/en/wpf/thread/e6643abc-4457-44aa-a3ee-dd389c88bd86?prof=required
которые предлагают
private bool IsItemDisconnected(object item)
{
bool isDisconnected = false;
var itemType = item.GetType();
if (itemType.FullName.Equals("MS.Internal.NamedObject"))
{
isDisconnected = true;
}
return isDisconnected;
}
эта последняя ссылка говорит о проблеме .NET 4, но у меня также есть ошибка на 3.5