2012-08-15 39 views
1

我有一個Block對象列表。每個區塊都有一個名稱和一個價格。隨着這裏如何在Silverlight中傳遞數據以查看用戶控件的模型?

並不重要塊1其它性質 - 10£
塊2 - £20

我已經實現,其顯示一個塊的用戶控制。

此控件擁有自己的視圖模型,我將視圖綁定到該視圖。例如。我有一個標籤Content="{Binding Name}"

我有一個單獨的視圖,其中包含一個堆棧面板。這將填補多個塊控制。

如何將塊列表中的每個塊傳遞給用戶控件的視圖模型?

Paul

回答

3

爲堆疊面板視圖創建視圖模型。在此視圖模型中公開塊視圖模型的集合。

將此集合綁定到像視圖中堆棧面板內的ItemsControl之類的東西。設置模板,以便用戶控件用於顯示每個項目。

ItemsControl實例化的每個控件都將與您的集合中的元素相關聯。這將導致每個用戶控件與其自己的視圖模型相關聯。

更新 - 這裏是一些代碼

主要頁面:

<Grid x:Name="LayoutRoot" Background="White"> 
    <StackPanel Orientation="Vertical"> 
     <ItemsControl ItemsSource="{Binding BlockViewModels}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <local:BlockView></local:BlockView> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </StackPanel> 
</Grid> 

背後的主要頁面代碼:

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     DataContext = new MainPageViewModel(); 
    } 
} 

主要網頁瀏覽模式:

public class MainPageViewModel 
{ 
    public ObservableCollection<BlockViewModel> BlockViewModels 
    { 
     get; 
     private set; 
    } 

    public MainPageViewModel() 
    { 
     BlockViewModels = new ObservableCollection<BlockViewModel>(); 
     BlockViewModels.Add(new BlockViewModel { CurrentBlock = new Block { Name = "Block 1", Price = 10 } }); 
     BlockViewModels.Add(new BlockViewModel { CurrentBlock = new Block { Name = "Block 2", Price = 20 } }); 
    } 
} 

模塊型號:

public class Block 
{ 
    public string Name 
    { 
     get; 
     set; 
    } 

    public int Price 
    { 
     get; 
     set; 
    } 
} 

塊視圖模型:

public class BlockViewModel 
{ 
    public Block CurrentBlock 
    { 
     get; 
     set; 
    } 
} 

塊視圖:

<Grid x:Name="LayoutRoot" Background="White"> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="{Binding CurrentBlock.Name}"></TextBlock> 
     <TextBlock Text=" - "></TextBlock> 
     <TextBlock Text="{Binding CurrentBlock.Price}"></TextBlock> 
    </StackPanel> 
</Grid> 
+0

對不起,我真的不明白這一點?你可以發佈一些代碼片段嗎?我瞭解ItemsControl的一面。我在ViewModels列表上苦苦掙扎。我想把代碼放在這裏,但每次按下輸入它的帖子評論!我創建了3個塊對象。然後,我瀏覽了這些視圖並創建了3個視圖模型,並將其添加到我的列表中。當我嘗試這個時,我什麼也沒有顯示。在我的控制中,XAML的正確語法是什麼?另外,我假設我不需要設置DataContext? – Paul 2012-08-18 13:12:43

+0

對不起,這是我與綁定的錯誤。當我在堆棧面板的視圖模型中創建視圖模型列表時,我假設它正確地創建一個新的視圖模型,然後將視圖模型的屬性設置爲當前塊?有沒有更好的方式來用較少的代碼來做到這一點? – Paul 2012-08-18 13:23:18

+0

我添加了一些示例代碼來澄清事情。至於創建模型和視圖模型 - 這可能是一個單獨的主題。我們使用Unity來創建我們的視圖模型。由於WCF請求,我們的模型通常來自服務器。 – boris 2012-08-21 15:14:53

相關問題