I want to be able to implement an ItemsControl with dragable items. The reason for the ItemsControl is so I can bind to my ViewModel in the background.
I\'ve tried
Ben I didn't think that approach worked at first but after more experimenting I got it.
The problem could be boiled down to: Canvas.Top and Canvas.Left don't work while in an items control. But you are correct that the style is the way to get around the problem. Here is the solution I came up with:
And the codebehind:
public partial class MainWindow : Window
{
public ObservableCollection Notes { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
Notes = new ObservableCollection();
Notes.Add(new Note(){Title="test", X=100, Y=0});
}
private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
Note n = (Note)((FrameworkElement)sender).DataContext;
n.X += e.HorizontalChange;
n.Y += e.VerticalChange;
}
}
public class Note : INotifyPropertyChanged
{
private string title;
private double x;
private double y;
public double Y
{
get { return y; }
set
{
y = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Y"));
}
}
public double X
{
get { return x; }
set
{
x = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("X"));
}
}
public string Title
{
get { return title; }
set
{
title = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Title"));
}
}
public event PropertyChangedEventHandler PropertyChanged;