Получение данных из внешних источников. JSON.
MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
Title="MainWindow" Height="450" Width="800">
<Grid ShowGridLines="False">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel
HorizontalAlignment="Center"
Grid.Row="1"
VerticalAlignment="Bottom">
<Button
x:Name="ExitButton"
Content="Выход"
Click="ExitButton_Click"
Height="50"
Width="200"/>
</StackPanel>
<Image
Source="/Image/logo.png"
Grid.RowSpan="1"/>
<ListBox
x:Name="CafeListBox"
Grid.Row="0"
Grid.Column="1"
ItemsSource="{Binding CafeList}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel
Orientation="Horizontal"
VerticalAlignment="Center">
<Image
Width="100"
Height="100"
Source="{Binding imageBitmap}"/>
<StackPanel>
<TextBlock
Text="{Binding Id, StringFormat='Номер заказа: {0}'}"/>
<TextBlock
Text="{Binding Title, StringFormat='Название блюда: {0}'}"/>
<TextBlock
Text="{Binding Category.Name, StringFormat='Категория: {0}'}"/>
<TextBlock
Text="{Binding Price, StringFormat='Цена: {0}'}"/>
<TextBlock
Text="Для веганов: "/>
<CheckBox IsChecked="{Binding IsVegetarian}"/>
<TextBlock
Text="{Binding ExpirationLast, StringFormat='Срок годности: dd.MM.yyyy'}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
xaml.cs
namespace WpfApp1
{
public partial class MainWindow : Window
{
public IEnumerable<Cafe> CafeList { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
Globals.dataProvider = new JSONDataProvider();
CafeList = Globals.dataProvider.getCafe();
}
private void ExitButton_Click(object sender, RoutedEventArgs e)
{
Application.Current.Shutdown();
}
}
}
JSONDataProvider
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WpfApp1.Model;
using CsvHelper;
using System.Globalization;
using System.Runtime.Serialization.Json;
namespace WpfApp1.Classes
{
public class JSONDataProvider : IDataProvider
{
private List<Cafe> _cafes;
public JSONDataProvider()
{
var serializer = new DataContractJsonSerializer(typeof(Cafe[]));
using (var sr = new FileStream("./cafe.json", FileMode.Open))
{
Cafe[] cafe = (Cafe[])serializer.ReadObject(sr);
_cafes = new List<Cafe>(cafe);
}
}
public IEnumerable<Cafe> getCafe()
{
return _cafes;
}
}
}
cafe.json
[
{
"Id": 1,
"Title": "Burger",
"IsVegetarian": false,
"Expiration": "2025-03-25",
"Price": 100,
"Category": { "Name": "Fastfood" },
"Photo": "1.jpg"
},
{
"Id": 2,
"Title": "MacaroniAndCheese",
"IsVegetarian": true,
"Expiration": "2025-03-03",
"Price": 140,
"Category": { "Name": "Fastfood" },
"Photo": "2.jpg"
},
{
"Id": 3,
"Title": "Shikaka",
"IsVegetarian": true,
"Expiration": "2025-03-06",
"Price": 110,
"Category": { "Name": "Salads" },
"Photo": "3.jpg"
},
{
"Id": 4,
"Title": "HotDog",
"IsVegetarian": false,
"Expiration": "2025-03-04",
"Price": 120,
"Category": { "Name": "Hotdishes" },
"Photo": "4.jpg"
},
{
"Id": 5,
"Title": "Pizza",
"IsVegetarian": false,
"Expiration": "2025-03-26",
"Price": 110,
"Category": { "Name": "Fastfood" },
"Photo": "5.jpg"
},
{
"Id": 6,
"Title": "CaesarWithChicken",
"IsVegetarian": false,
"Expiration": "2025-03-08",
"Price": 160,
"Category": { "Name": "Salads" },
"Photo": "6.jpg"
},
{
"Id": 7,
"Title": "Olivier",
"IsVegetarian": false,
"Expiration": "2025-03-29",
"Price": 140,
"Category": { "Name": "Salads" },
"Photo": "7.jpg"
},
{
"Id": 8,
"Title": "GrilledChicken",
"IsVegetarian": false,
"Expiration": "2025-03-18",
"Price": 200,
"Category": { "Name": "Hotdishes" },
"Photo": "8.jpg"
},
{
"Id": 9,
"Title": "HerringUnderAFurCoat",
"IsVegetarian": false,
"Expiration": "2025-03-16",
"Price": 160,
"Category": { "Name": "Salads" },
"Photo": "9.jpg"
},
{
"Id": 10,
"Title": "Nuggets",
"IsVegetarian": false,
"Expiration": "2025-03-26",
"Price": 180,
"Category": { "Name": "Fastfood" },
"Photo": "10.jpg"
}
]
