2012-04-17 5 views
0

申し訳ありませんが、これはnoobの質問です。私はちょうどあなたが心配していないことをうまくいけばWPFを学び始めた。しかし、xamlを通じて動的に各行に対して2つの列を作成することは可能ですか、それともバックエンドコード(viewmodel、.cs)で行う必要がありますか?今私は、データソースとのバインドを介して、アイテムの長いリストを持っています。たとえば、datasource = "{binding path = House.Item}" ... Itemは、ストアドプロシージャコールを実行するときにラベルと値を格納するコレクションです。例:label = "Color"、value = "White"。動的に行と列を作成する

私は現在持っている:

色< - ラベル

ホワイト< - TextBlock内の値

ウィンドウ< - ラベル

ビニール< - 値でテキストブロックなど...

私は行ごとの2列(正確にdoesntの表示)する結果を持っていると思います

色| >>>ウィンドウ

ホワイト| >>> Vinly

ドア| >>>地下室

木材| >>>仕上げ

私がこれを達成したい理由は、アイテムが本当に長くなった場合に備えて、水平スクロールを排除できるからです。どんな助言も役に立つでしょう。高度なおかげで多くのありがとう。

更新:

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

これが私のデータは、私はそれが「左から右」と表示したいのに対し、再び「上から下に、」私のような流れを与えているが生成されるかはかなりあります。 例えば:1 2 3 < - (私が欲しいもの) の代わり

答えて

1

リストを表示する場合は、リストボックスコントロールを表示する必要があります。リスト内の各アイテムに対して、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つのテキストブロックを含むスタックパネルを配置することができます。次に、各値をテキストブロックに直接バインドすることができます。

関連する問題