2010-08-25 2 views
0

У меня есть код, который добавляет пользовательский элемент управления к холсту. Первоначально я имел это в событии MouseRightButtonDown Canvas, но с тех пор переместил его в событие с измененной коллекцией, которое срабатывает в ViewModel. Когда я вызываю тот же самый метод из события CollectionChanged, пользовательский интерфейс не обновляется, чтобы отражать UserControl на холсте. Однако, когда я использую тот же самый код из события мыши на холсте, он прекрасно работает по назначению.Добавление в холст Программно

Я сделал некоторое рытье и попытался следующие исправить вещи, но безрезультатно:

  1. Вызов метода UpdateLayout холста

  2. управления видимостью свойства, чтобы попытаться обновить пользовательский интерфейс.

  3. Вызов его с помощью диспетчера 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; 
}); 

ответ

0

Вполне возможно, что событие collectonChanged происходит до того, как холст был initalized. Попытайтесь добавить материал в коллекцию после того, как пользовательское управление загрузило содержимое холста.

Смежные вопросы