CategoriesView.xaml
<local:AllViewBase x:Class="Test.View.Tab.CategoriesView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Test.View.Abstract"
mc:Ignorable="d">
<UserControl.Resources>
<ResourceDictionary Source="pack://application:,,,/Content/Style/MainWindowDictionary.xaml"/>
</UserControl.Resources>
<Grid>
<ListBox ItemsSource="{Binding Path=dcCategory}" SelectedItem="{Binding Path=Category,Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel Orientation="Horizontal" >
<Button Content="Add Value" Command="{Binding Path=DataContext.AddValue, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"/>
<TextBlock Text="{Binding Path=Key}"/>
</StackPanel>
<ListBox ItemsSource="{Binding Path=Value}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</Grid>
</local:AllViewBase>
CategoriesViewModel.cs
namespace Test.ViewModel.Tab
{
public class CategoriesViewModel : AllViewModel<CategoryValueAllView>
{
private BaseCommand _AddValue;
private Category _Category;
public Category Category
{
get
{
return _Category;
}
set
{
if (_Category != value)
{
_Category = value;
OnPropertyChanged(() => Category);
}
}
}
private Dictionary<Category, List<string>> _dcCategory;
public Dictionary<Category, List<string>> dcCategory
{
get
{
if (_dcCategory == null) LoadDictionary();
return _dcCategory;
}
set
{
if (_dcCategory != value)
{
_dcCategory = value;
OnPropertyChanged(() => dcCategory);
}
}
}
public ICommand AddValue
{
get
{
if (_AddValue == null)
{
_AddValue = new BaseCommand(() => Messenger.Default.Send(CategoryValueCode.AddValue + "," + Category.CategoryId));
}
return _AddValue;
}
}
public void LoadDictionary()
{
dcCategory = (from k in db.Category join w in db.CategoryVal on k.CategoryId equals w.CategoryId select new CategoryValueAllView { Category = w.Category, Val = w.Val }).GroupBy(x => x.Category).ToDictionary(grp => grp.Key, grp => grp.Select(obj => obj.Val).ToList());
}
}
}
Мои цели:
<TextBlock Text="{Binding Path=Key}"/>
показать Category.Name. Я не
знать, как использовать Key как объект и использовать свойство Name
- когда я нажимаю кнопку «Добавить значение», я хочу установить «CategoryId» в объекте «Category» и отправить его через команду «AddValue»
Коммуникатор
Ранее я использовал строковое имя category.name вместо объекта категории для ключа словаря. Затем <TextBlock Text="{Binding Path=Key}"/>
показывает правильное имя, но в конце концов я не смог передать команду «category.name» команде «AddValue» после нажатия кнопки, чтобы получить идентификатор по имени и установить данные с помощью Messenger.
Получение идентификатора по имени также допустимо, объект Category в качестве ключа не требуется
Несмотря ни на что, я хотел бы узнать это, но не могу вынести пример, который показал такую проблему
Спасибо!