Witam.
Krótko o aplikacji: jest to aplikacja do nauki języka angielskiego na zasadzie quizu. W aplikacji jest baza danych słów i baza danych kategorii.
Mam takowy problem:
W aplikacji którą piszę mam możliwość zarządzania bazą danych słów i kategorii. Baza danych CF Entity Framework. Tak wygląda schemat bazy:
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
namespace ClickEnglish
{
class DictionaryContext : DbContext
{
public DictionaryContext() : base("Dictionary")
{
Database.SetInitializer<DictionaryContext>(new DropCreateDatabaseIfModelChanges<DictionaryContext>());
}
public DbSet<Word> Dictionary { get; set; }
public DbSet<Category> Categories { get; set; }
public DbSet<UserSettings> UserSettings { get; set; }
}
public class Word : IQuestion
{
[Key]
public int ID { get; set; }
[Required]
public string English { get; set; }
[Required]
public string Polish { get; set; }
public Category Category { get; set; }
public double Difficulty { get; set; }
public byte[] Picture { get; set; }
}
public class Category
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Word> Words { get; set; }
}
public class UserSettings
{
[Key]
public int ID { get; set; }
public bool Sound { get; set; }
public int TimeChallange { get; set; }
public int VocabularySize { get; set; }
}
}
Edytowanie bazy odbywa się w datagridzie, jednak mam problem z podpięciem klasy Category. Moim zamiarem jest aby wyświetlało się to w postaci ComboBoxa, tak aby do każdego zestawu słów można było przyporządkować kategorię lub ją zmienić. Niestety kategorie nie wyświetlają się w ogóle datagridzie.
1. Jaki musiałbym zrobić binding aby przy ładowaniu danych wyświetlała się też kategoria dla danych wyrazów?
2. Czy mogę jakoś bezpośrednio mieć podpiętą listę kategorii (w sensie, bez pobierania jej i konwertowania na listę string) tak abym mógł "na żywo" zmieniać kategorie?
Kod WPF:
<Window x:Class="ClickEnglish.DictionaryManager"
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:ClickEnglish"
mc:Ignorable="d" Loaded="OnLoad"
Title="DictionaryManager" Height="600" Width="800">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Style.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Window.Background>
<ImageBrush ImageSource="background/DictionaryManager_Background.jpeg"/>
</Window.Background>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!--Datagrid with dictionary-->
<DataGrid x:Name="dgDictionary" Grid.Row="0" Grid.RowSpan="2" Grid.Column="0" Grid.ColumnSpan="2" Opacity="0.7" AutoGenerateColumns="False"
Margin="10" PreviewKeyDown="KeyPreview" CellEditEnding="EditDictionary_End" BeginningEdit="EditDictionary_Begin">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}"></DataGridTextColumn>
<DataGridTextColumn Header="English" Binding="{Binding English}"></DataGridTextColumn>
<DataGridTextColumn Header="Polish" Binding="{Binding Polish}"></DataGridTextColumn>
<DataGridComboBoxColumn x:Name="dgCbxCategories" Header="Category" DisplayMemberPath="Name" SelectedItemBinding="{Binding Category}"></DataGridComboBoxColumn>
<DataGridTextColumn Header="Difficulty" Binding="{Binding Difficulty}"></DataGridTextColumn>
<DataGridTemplateColumn Header="Picture">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Picture}" Stretch="Fill" MaxWidth="200" MinWidth="200">
<Image.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove picture" Click="ClearPicture"/>
</ContextMenu>
</Image.ContextMenu>
</Image>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<!--Buttons and searcher-->
<WrapPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Center">
<!--Searcher-->
<TextBox x:Name="txtSearcher" Grid.Row="0" Grid.Column="0" Margin="5" TextChanged="Searcher_TextChanged" MinWidth="255" MaxHeight="40"/>
<!--Add new word-->
<Button Style="{StaticResource Button_TileStyle}" Height="60" Margin="10" FontFamily="Kristen ITC" FontSize="20" Click="AddWord_Click">
<TextBlock TextWrapping="WrapWithOverflow" Text="Add new" HorizontalAlignment="Center" TextAlignment="Center" VerticalAlignment="Center"/>
</Button>
<!--Remove-->
<Button Style="{StaticResource Button_TileStyle}" Height="60" Margin="10" FontFamily="Kristen ITC" FontSize="20" Click="RemoveWord_Click">
<TextBlock TextWrapping="WrapWithOverflow" Text="Remove selected" HorizontalAlignment="Center" TextAlignment="Center" VerticalAlignment="Center"/>
</Button>
<!--Exit-->
<Button Style="{StaticResource Button_TileStyle}" Height="60" Margin="10" FontFamily="Kristen ITC" FontSize="20" Click="Exit_Click">
<TextBlock TextWrapping="WrapWithOverflow" Text="Exit" HorizontalAlignment="Center" TextAlignment="Center" VerticalAlignment="Center"/>
</Button>
</WrapPanel>
</Grid>
</Window>