3

Json文字列を取得してDATACONTRACTSにデセリア化する必要がある、Windows 8用のアプリがあります。リストボックスに必要な情報が表示され、最大の高さがあり、最大の高さを超えるとスクロールします。

私がそれを持っているという問題は、それを行うことができないほどではなく、むしろそれを行う方法を知らないということです。

これまでのところ、Jsonを逆シリアル化して、各アイテムをUIのどこに配置するかを指定できますが、基本的には、配列内の各アイテムに対して、Textblockでフォーマットされた新しいStackpanelを作成する必要があります。 Jsonからの情報。残念ながら、これを行う方法がわかりません。また、それを行う方法のチュートリアルを取得するために何を検索しているのか本当にわかりません。

これは、ヘルパークラスを使用してjsonからアイテムを取得し、それらをTextBlocksのテキストに配置するコードです。

var _FilterSaleList = new FilterSalesList();
var _Sales = await _FilterSaleList.FindSalesbyFilters();
string _SaleName = _Sales.sales[0].name.ToString();
string _SaleDescription = _Sales.sales[0].description.ToString();
string _SaleName1 = _Sales.sales[1].name.ToString();
string _SaleDescription1 = _Sales.sales[1].description.ToString();
int _TotalResults = _Sales.sales.Length;
SaleTitle.Text = _SaleName;
SaleDescription.Text = _SaleDescription;
SaleTitle1.Text = _SaleName1;
SaleDescription1.Text = _SaleDescription1;

これは、2つのスタックパネルが既に含まれているリストボックスのXAMLコードです。

<ListBox Grid.Row="1">
    <StackPanel Margin="0,0,0,5">
        <TextBlock x:Name="SaleTitle" Text="" HorizontalAlignment="Center" Margin="0,0,0,5"/>
        <TextBlock x:Name="SaleDescription" Text="" HorizontalAlignment="Center" MaxHeight="40" Margin="0,0,0,5" TextWrapping="Wrap"/>                        
    </StackPanel>
    <StackPanel Margin="0,0,0,5">
        <TextBlock x:Name="SaleTitle1" Text="" HorizontalAlignment="Center" Margin="0,0,0,5"/>
        <TextBlock x:Name="SaleDescription1" Text="" HorizontalAlignment="Center" MaxHeight="40" Margin="0,0,0,5" TextWrapping="Wrap"/>
    </StackPanel>
</ListBox>

以下は私がそれをどのように見せたいかというイメージです。私が言ったようにすべてがこのように機能しますが、jsonの各アイテムが新しいスタックパネルを作成し、画像のように情報を表示するようにしたいと思います。これが行われるときにそれが何と呼ばれるかはわかりませんので、どこを見ればよいかについての簡単なヒントでも素晴らしいでしょう!

http://puu.sh/2biMZ

4

1 に答える 1

2

XAMLには、バインディングと呼ばれる非常に優れた機能があります。これを使用すると、オブジェクトまたはオブジェクトのリストをビジュアル要素にバインドするだけで済みます。このように、C#コードでグラフィカルユーザーインターフェイスを手動で「構築」する必要はありません。

これは非常に大きなトピックであるため、MVVMとは何かを確認する必要があります。これは、バインディングの機能を活用するのに役立ちます:http: //channel9.msdn.com/Series/Building-Apps-for-Both-Windows -8-and-Windows-Phone-8-Jump-Start / Building-Apps-for-Both-Windows-8-and-Windows-Phone-8-03-Model-View-ViewModel

しかし今のところ、あなたができることは:

1 / ItemTemplateプロパティのDataTemplateを使用して、ListBoxを次のように定義します。

<ListBox Grid.Row="1" x:Name="SalesListbox">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0,0,0,5">
                <TextBlock x:Name="SaleTitle" Text="{Binding name}" HorizontalAlignment="Center" Margin="0,0,0,5"/>
                <TextBlock x:Name="SaleDescription" Text="{Binding description}" HorizontalAlignment="Center" MaxHeight="40" Margin="0,0,0,5" TextWrapping="Wrap"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

DataTemplateは、リストの各アイテムをどのようにレンダリングするかを指示します。また、各テキストブロックのテキストプロパティにBindingをどのように使用したかにも注意してください。これは、モデルのプロパティの名前にバインドされnameています。description

次に、リストボックスにデータを入力できます。

var filterSaleList = new FilterSalesList();
var salesByFilters = await filterSaleList.FindSalesbyFilters();
SalesListbox.ItemsSource = salesByFilters.sales;
于 2013-03-03T14:43:58.273 に答える