我有點驚訝,無法通過XAML爲Canvas.Children設置綁定。我不得不求助於代碼隱藏的辦法,看起來是這樣的:是否可以在XAML中綁定Canvas的Children屬性?
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
DesignerViewModel dvm = this.DataContext as DesignerViewModel;
dvm.Document.Items.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Items_CollectionChanged);
foreach (UIElement element in dvm.Document.Items)
designerCanvas.Children.Add(element);
}
private void Items_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
ObservableCollection<UIElement> collection = sender as ObservableCollection<UIElement>;
foreach (UIElement element in collection)
if (!designerCanvas.Children.Contains(element))
designerCanvas.Children.Add(element);
List<UIElement> removeList = new List<UIElement>();
foreach (UIElement element in designerCanvas.Children)
if (!collection.Contains(element))
removeList.Add(element);
foreach (UIElement element in removeList)
designerCanvas.Children.Remove(element);
}
我寧願剛剛成立的XAML這樣的綁定:
<Canvas x:Name="designerCanvas"
Children="{Binding Document.Items}"
Width="{Binding Document.Width}"
Height="{Binding Document.Height}">
</Canvas>
是否有無需訴諸代碼隱藏方法即可完成此任務?我在這個主題上做了一些Google搜索,但對於這個特定的問題還沒有提出太多。
我不喜歡我當前的方法,因爲它通過使視圖察覺到它的ViewModel來隱藏我的不錯的Model-View-ViewModel。
這是否有性能問題,因爲你增加了對要繪製的每個點一個全新的印刷品嗎? – Benjamin 2016-03-08 19:20:12