Работа с ListView SelectedItem в WPF MVVM
пишу программу на диплом, но совершенно не могу понять и найти нужную мне информацию. В общем у меня есть вкладка со справочниками, где находятся два элемента ListBox. В одном находятся категории справочников, а во втором должны выводиться элементы, которые содержаться конкретно в этой категории.
Как это реализовать? База данных если что используется SQLite. Привожу свой код:
NotifyPropertyChanged.cs
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace DogsRun.Common
{
public class NotifyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
CatalogModel.cs
using DogsRun.Common;
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace DogsRun.Models
{
public class CatalogModel : NotifyPropertyChanged
{
private string element;
public string Element
{
get { return element; }
set
{
element = value;
OnPropertyChanged("Element");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
}
CatalogViewModel.cs
private CatalogModel selectedCatalog;
public ObservableCollection<CatalogModel> Elements { get; set; }
public CatalogModel SelectedCatalog
{
get { return selectedCatalog; }
set
{
selectedCatalog = value;
OnPropertyChanged("SelectedCatalog");
}
}
public CatalogViewModel()
{
Elements = new ObservableCollection<CatalogModel>
{
new CatalogModel { Element = "Gar" },
new CatalogModel { Element = "Afe" }
};
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
CatalogView.xaml
<!--Reference Select-->
<Border CornerRadius="20" Padding="0 25" Background="#243771" Margin="50 0 10 40">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="20 0 0 15">
<fa:IconImage Icon="TableColumns" Style="{StaticResource titleIcon}" />
<TextBlock Text="Выбор справочника" Style="{StaticResource titleText}" />
</StackPanel>
<ListView Grid.Row="1" Background="Transparent" BorderThickness="0" SelectedItem="{Binding SelectedCatalog}">
<ListViewItem>
<uc:Catalog Title="Породы" Icon="Dog" />
</ListViewItem>
<ListViewItem>
<uc:Catalog Title="Возрастной класс" Icon="Dog" />
</ListViewItem>
<ListViewItem>
<uc:Catalog Title="Пол" Icon="Dog" />
</ListViewItem>
<ListViewItem>
<uc:Catalog Title="Жюри" Icon="Person" />
</ListViewItem>
<ListViewItem>
<uc:Catalog Title="Владелец" Icon="Person" />
</ListViewItem>
</ListView>
</Grid>
</Border>
<!--Reference Elements-->
<Border Grid.Column="1" CornerRadius="20" Padding="0 25" Background="#243771" Margin="15 0 47 40">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="20 0 0 15">
<fa:IconImage Icon="Person" Style="{StaticResource titleIcon}" />
<TextBlock Text="Элементы" Style="{StaticResource titleText}" />
</StackPanel>
<ListView Grid.Row="1" Background="Transparent" BorderThickness="0" DataContext="{Binding SelectedCatalog}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Element}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<StackPanel Grid.Row="2">
<Button Style="{StaticResource baseButton}">
<StackPanel Orientation="Horizontal">
<fa:IconImage Icon="Plus" Style="{StaticResource menuButtonIcon}" />
<TextBlock Text="Добавить" Style="{StaticResource menuButtonText}"/>
</StackPanel>
</Button>
<Button Style="{StaticResource baseButton}">
<StackPanel Orientation="Horizontal">
<fa:IconImage Icon="TrashCan" Style="{StaticResource menuButtonIcon}" />
<TextBlock Text="Удалить" Style="{StaticResource menuButtonText}"/>
</StackPanel>
</Button>
</StackPanel>
</Grid>
</Border>