沒有代碼綁定到父位置的變化在WPF我有一個類似Visio interfact但有背後的一些元素的實際模型數據。元素可以由用戶移動。如何使用XAML和背後
我使用ContentControl中在畫布上,由此元件的的ViewModels是在隨後可被不同地顯示根據它們的類型,但使用相同的ContentControl中的內容的地方。將視圖綁定到視圖模型中的不同屬性很簡單。但是,我必須在模型中保存位置,並且找不到有約束力的解決方案。
1)Application.Save命令在主視圖模型處理,所以我沒有訪問視圖那裏。這意味着當元素移動時我必須保存位置數據,還是有更好的方法?
2)假設我是對1),我期待,以避免後面的代碼,即我不想ContentControl中對付,他們在他們的內容具備的要素。然而,迄今爲止版本後面的代碼是我能想出:
我身後的解決方案到目前爲止的代碼:
所有的模型元素實現一個接口:
public interface IViewElement
{
String Position { get; set; }
}
而在ContentControl中:
void ContentControl_LayoutUpdated(object sender, EventArgs e)
{
IViewElement content = this.Content as IViewElement;
content.Position = new Point(Diagram.GetLeft(this), Diagram.GetTop(this)).ToString();
}
的XAML:
<Style TargetType="{x:Type diagram:Item}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type diagram:Item}">
<Grid Canvas.Top="{Binding ElementName=PART_ContentPresenter, Path=Content.Position, Mode=TwoWay}" DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}"
ContextMenu="{x:Null}">
<!-- PART_ContentPresenter -->
<ContentPresenter x:Name="PART_ContentPresenter"
Content="{TemplateBinding Content}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<DataTemplate DataType="{x:Type local:ViewModel}">
<StackPanel>
...
</StackPanel>
你可以包括你的XAML直至幷包括canvas標籤? – Rachel 2011-03-31 11:40:25
爲什麼沒有隱藏代碼? – 2011-03-31 11:49:37