2012-04-17 95 views
0

對不起,如果這是一個noob問題。我剛開始學習WPF,所以希望你們不介意。但是,是否有可能通過xaml動態地爲每行創建兩列,還是必須在後端代碼(viewmodel,.cs)中完成?現在,我只通過綁定數據源來列出很多項目。例如,datasource =「{binding path = House.Item}」... Item是一個集合,它在執行存儲過程調用時存儲標籤和值。例如:label =「Color」,value =「White」。動態創建行和列

我目前有:

顏色< - 標籤

白< - 價值 - 標籤

乙烯< - 在一個文本塊

窗口<值文本塊...等

我想有得到的結果是對於每行2列(犯規顯示正確地):

顏色| >>> Window

White | >>> Vinly

門| >>>地下室

木材| >>>完成

我想達到這個目的的原因是我可以消除水平滾動,以防萬一項目變得很長。任何意見將是有益的。先進的感謝很多。

更新:

<ListBox.Resources>         
<DataTemplate DataType="{x:Type Models:HouseDetail}" >            
<Views:HouseView>   
</DataTemplate> 
<ListBox.Resources> 

其實這就是我的數據是如何產生的,再次是給我像一個流「自上而下」,而我想它顯示「從左到右」。 例如:1 2 3 < - (我想)的 代替

回答

1

如果想要顯示一個列表,那麼你應該看看一個Listbox控件。對於列表中的每個項目,您可以使用ItemTemplate描述如何佈置項目。有關使用ItemTemplates的更多信息,請參見ItemTemplate documentation

有一個代表你的列表項的對象(例如House類)。創建列表項的ObservableCollection並將您的列表框綁定到ObservableCollection。然後,在XAML中,描述每個House項目的佈局以及您希望它看起來如何。像這樣的東西應該工作:

代碼

public class House 
{ 
    public string Color { get; set; } 
    public string Material { get;set; } 
    public string Window { get; set; } 
} 


public class ViewModel 
{ 
    public ObservableCollection<House> Houses { get; set; } 
} 

XAML:

<!-- DataContext should be set to an instance of ViewModel --> 
<ListBox ItemsSource="{Binding Houses}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <!-- I am just using StackPanels here, but you can use any layout control you want to describe how you want each list item to look --> 
       <StackPanel Orientation=Horizontal> 
        <TextBlock Text="House Color:"/> 
        <TextBlock Text="{Binding Path=Color}"/> 
       </StackPanel> 
       <StackPanel Orientation=Horizontal> 
        <TextBlock Text="House Material:"/> 
        <TextBlock Text="{Binding Path=Material}"/> 
       </StackPanel> 
       <!-- Add more controls to show more information --> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

對不起,我沒有編譯器方便,所以我不知道這是否會編譯,但它應該接近。

0

我不知道如果我理解正確的問題,但我認爲stackpanel可能是你正在尋找的東西。

在控件的每一行中,您都可以擁有一個包含2個文本塊的堆疊面板。然後你可以直接將每個值綁定到文本塊。