有没有办法在没有ItemsControl ItemsSource绑定属性的情况下设置Canvas Children属性?
为了使我的视图与viewmodel保持分离,我必须绑定项目。 我使用画布作为'CodeProject'的设计师
http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part2.aspx
我正在使用画布进行拖放。当我在画布内手动操作时,它运行良好。 这意味着我使用
添加和删除子项myCanvas.Children.Add(userControl);
myCanvas.Children.Remove(userControl);
但是如果我在运行时加载我的用户控件,它们就像视图一样加载。
<s:Canvas AllowDrop="True" >
<ItemsControl Grid.Row="1" ItemsSource="{Binding Path=userControls}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<s:Canvas Background="Transparent"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<s:ControlItem Content="{Binding Path=MyView}"></s:ControlItem >
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding Path=X}" />
<Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</s:Canvas>
答案 0 :(得分:1)
答案 1 :(得分:0)
<Canvas>
<TextBlock Text="I'm Child #1" />
<TextBlock Text="I'm Child #2" Canvas.Top="50" />
</Canvas>
或者您可以随时在代码隐藏
中执行此操作myCanvas.Children.Add(myTextBlock);
foreach(var someControl in SomeControlList)
myCanvas.Children.Add(someControl);
修改强>
我看到你的更新,不知道你在问什么。如果要将项目拖放到画布上,最好从ItemsSource
添加/删除项目,而不是从“画布”中手动添加/删除项目。只需在myCanvas
中添加/删除它们,就不会更新ItemsSource
我建议您查看Bea Stollnitz's article on dragging/dropping databound Items。这意味着您将保留现在的ItemsControl
,但当您将项目放在Canvas
之上时,它会将该对象后面的DataItem添加到您调用的ObservableCollection<MyDataItem>
userControls
(我不喜欢这个名字,因为它表明数据项包含UI项目,不应该是这种情况)