私はオンラインデータベースを持っています。そして、私は、クエリ結果をリストボックスに表示したい。私はデータバインディングを使用しようとしたが、私はそれが完全に間違っていると思う。リストボックスへのデータバインディングリストC#XAML(Azureモバイルサービス)UWP
ファイル
[![]ここに画像の説明を入力し、[1] [1]
表
class ProductTable
{
public string id { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public double Price { get; set; }
public string Type { get; set; }
public string Seller { get; set; }
public int Expiration { get; set; }
}
MainViewModel.cs
namespace Test
{
class MainViewModel
{
IMobileServiceTable<ProductTable> product = App.MobileService.GetTable<ProductTable>();
//In this method, load your data into Products
public async void Load()
{
// This query filters out completed TodoItems.
MobileServiceCollection<ProductTable, ProductTable> Products = await product
.Where(ProductTable => ProductTable.Price == 15)
.ToCollectionAsync();
// itemsControl is an IEnumerable that could be bound to a UI list control
IEnumerable itemsControl = Products;
}
}
}
XAML
<Page x:Name="PAGE"
xmlns:local="clr-namespace:Test;assembly=Version1">
<Grid>
<Grid.DataContext>
<local:MainViewModel />
</Grid.DataContext>
<ListBox Margin="10,10,10,100" x:Name="lb" ItemsSource="{Binding Products}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" FontSize="10"></TextBlock>
<TextBlock Text="{Binding Title}" FontSize="10"></TextBlock>
<TextBlock Text="{Binding Description}" FontSize="10"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Page>
ソリューション
表は、明示的にそうでなければ、データバインディングを使用することができません宣言したJSONのプロパティ名を必要とします。あなたが新しいリストボックスを宣言する必要はありません
Table.cs
public class ProductTable
{
[JsonProperty(PropertyName = "id")]
public string id { get; set; }
[JsonProperty(PropertyName = "Name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "Title")]
public string Title { get; set; }
[JsonProperty(PropertyName = "Description")]
public string Description { get; set; }
[JsonProperty(PropertyName = "Price")]
public double Price { get; set; }
[JsonProperty(PropertyName = "Type")]
public string Type { get; set; }
[JsonProperty(PropertyName = "Seller")]
public string Seller { get; set; }
[JsonProperty(PropertyName = "Expiration")]
public int Expiration { get; set; }
}
XAML.csは、唯一itemsourceを使用しています。 StackPanel、IN
private async void button1_Click(object sender, RoutedEventArgs e)
{
IMobileServiceTable<ProductTable> productTest = App.MobileService.GetTable<ProductTable>();
// This query filters out completed TodoItems.
MobileServiceCollection<ProductTable, ProductTable> products = await productTest
.Where(ProductTable => ProductTable.Type == "Test")
.ToCollectionAsync();
lb.ItemsSource = products;
}
XAML
、NEVER EVERこれは重大なエラーが発生します "*" HEIGHTを使用してください!表示されていないコードに1つ、あなたのDataContextが何であれにバインドされているXAMLでの1 -
<ListBox x:Name="lb" Margin="10,10,10,100" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Width="300">
<TextBlock Text="{Binding Name}" FontSize="10"></TextBlock>
<TextBlock Text="{Binding Title}" FontSize="10"></TextBlock>
<TextBlock Text="{Binding Description}" FontSize="10"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
私はまだC#を学んでいますので、あなたが意味するものの例を挙げることができます。 「次に、MVVMを使用する場合はViewModelクラスのプロパティとして商品を公開し、ListBoxのDataContextがViewModel /クラスに設定されていることを確認してください。 – user6480540
あなたのコードを使用しようとしましたが、は普遍的なWindowsではサポートされていませんので、要素に置き換えようとしました。今すぐ自分のコードを見てください。私はかなり迷惑であることを知っていますが、あなたが私を助けることができれば本当に感謝しています。 –
user6480540
@ user6480540:はい。私は主にWPFをやったので、それはページです。それはほんの一例でした。 'local'には、それを名前空間として宣言する必要があります。この例を自分のXAMLに追加します。 –