2009-10-30 79 views
0

我將如何綁定到一組形狀?綁定到一組形狀?

我想建立一個小型應用程序(僅用於學習目的),我利用MVVM繪製形狀。

的主窗口的DataContext的是MainWindowViewModel

即MainWindowViewModel具有形狀的一個ObservableCollection。

我目前只能在我的主窗口與它的DataContext綁定到該集合的畫布不工作:

<Window x:Class="DesktopCanvas.MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
> 
    <Canvas DataContext="{Binding Source=ShapeCollection}"> 
    </Canvas> 
</Window> 

在MainWindowViewModel的構造我添加一個矩形這樣的:

this.ShapeCollection = new ObservableCollection<Shape>(); 
Rectangle rect = new Rectangle(); 
//Größe 
rect.Height = 75; 
rect.Width = 75; 
//Transparenz 
rect.Opacity = 100; 
//Farbe 
SolidColorBrush myBrush = new SolidColorBrush(Colors.Red); 
rect.Fill = myBrush; 
this.ShapeCollection.Add(rect); 

目前沒有綁定錯誤。有任何想法嗎?

回答

1

你想要使用一個ItemsControl綁定到一個數據集合,並讓每個數據塊 由某種類型的UI表示。另外,你沒有正確設置綁定。讓我們先從這兩個東西的外觀:

<ItemsControl ItemsSource="{Binding Path=ShapeCollection, Element=MainWindow}"> 
</ItemsControl> 

注:上述約束力的聲明假定您已經應用了X:NAME =「主窗口」你的窗口元素,而且ShapeCollection是一個屬性關閉你的MainWindow類。

現在,由於ItemsControl的默認佈局是一個垂直方向的StackPanel,因此您應該可以看到您的形狀堆疊在一起。如果你想改變元素的佈局,你可以改變ItemsControl的ItemPanelTemplate。讓我們改變它,以便形狀水平放置,並在空間耗盡時垂直包裹:

<ItemsControl Height="100" ItemsSource="{Binding ShapeCollection, ElementName=Window, Mode=Default}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

最後我們來談談您的整體方法。現在你實際上使用Shapes作爲你的數據,這實際上是從一種稱爲Mode-View-ViewModel(MVVM)的技術稍微向後的。在MVVM中,您只需要一個純數據對象,然後您或者更好的是您的設計人員使用DataTemplates定義該數據的可視表示。有關MVVM的更多信息,我建議您只需點擊StackOverflow上的標籤並挖掘最高投票的問題即可。