У меня есть код, который добавляет пользовательский элемент управления к холсту. Первоначально я имел это в событии MouseRightButtonDown Canvas, но с тех пор переместил его в событие с измененной коллекцией, которое срабатывает в ViewModel. Когда я вызываю тот же самый метод из события CollectionChanged, пользовательский интерфейс не обновляется, чтобы отражать UserControl на холсте. Однако, когда я использую тот же самый код из события мыши на холсте, он прекрасно работает по назначению.Добавление в холст Программно
Я сделал некоторое рытье и попытался следующие исправить вещи, но безрезультатно:
Вызов метода UpdateLayout холста
управления видимостью свойства, чтобы попытаться обновить пользовательский интерфейс.
Вызов его с помощью диспетчера UserControl для вызова анонимного делегата: Dispatcher.BeginInvoke (() => code);
Вот пример кода, который я использую:
CustomUserControl stub = new CustomUserControl();
stub.Width = 10;
stub.Height = 10;
stub.SetValue(Canvas.LeftProperty, xCurrent);
stub.SetValue(Canvas.TopProperty, yCurrent);
stub.MouseLeftButtonDown += this.Element_MouseLeftButtonDown;
stub.MouseMove += this.Element_MouseMove;
stub.MouseLeftButtonUp += this.Element_MouseLeftButtonUp;
this.Dispatcher.BeginInvoke(() =>
{
drawCanvas.Children.Add(stub);
drawCanvas.Visibility = Visibility.Visible;
this.Visibility = Visibility.Visible;
});