0

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

私は現在持っています:

色 <-- ラベル

白 < -- テキストブロックの値

ウィンドウ <-- ラベル

Vinyl < -- テキストブロック内の値 ... など

結果を各行に 2 列にしたい (正しく表示されない):

カラー | >>> 窓口

ホワイト | ホワイト | >>> ヴィンリー

ドア | ドア | >>> 地下室

木材 | >>> 終了

これを達成したい理由は、アイテムが非常に長くなった場合に備えて、水平スクロールを排除できるようにするためです。どんなアドバイスも役に立ちます。ありがとうございます。

アップデート:

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

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

1

2

3

4

2 に答える 2

1

リストを表示したい場合は、Listbox コントロールを確認する必要があります。リスト内の各項目について、ItemTemplate を使用して項目をどのようにレイアウトするかを記述できます。ItemTemplate の使用に関する詳細については、 ItemTemplate のドキュメントを参照してください。

リスト アイテムを表すオブジェクトを用意します (House クラスなど)。リスト項目の ObservableCollection を作成し、Listbox を ObservableCollection にバインドします。次に、XAML で、各ハウス アイテムのレイアウトと外観を記述します。このようなものが動作するはずです:

コード

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>

申し訳ありませんが、手元にコンパイラがないため、これがコンパイルされるかどうかはわかりませんが、近いはずです。

于 2012-04-17T02:58:19.043 に答える
0

問題を正しく理解したかどうかはわかりませんが、スタックパネルが探しているものかもしれません。

コントロールの各行には、2 つのテキストブロックを含むスタックパネルを配置できます。次に、各値をテキストブロックに直接バインドできます。

于 2012-04-17T01:48:16.663 に答える