Я немного озадачен этим.У меня есть коллекция под названием «AllProducts», в которой есть коллекция под названием «ProductGroups» (для группирования элементов по отдельности), которая содержит коллекцию объектов «Product» под названием «LineItems» (фактические элементы).
Чтобы установить это, я установил ListBox с DataGrid внутри элемента itemtemplate для элементов ListBox.При установке ItemsSource в списке на «ProductGroups» и DataGrid (в шаблоне элемента) имеется ItemSource, указывающий на LineItems.
DataGrid содержит столбцы:
«Выбрать» - флажок и радиокнопка
«Изображение» - строка
«Имя» - строка
«Описание» - строка
«Цена» - строка
Коллекция «ProductGroup» имеетсвойство bool под названием «IsListItem» для каждой группы, которое должно сообщать мне, можете ли вы выбрать несколько или один элемент для этой группы (отсюда флажок и переключатель в первом столбце DataGrid).Я хочу, чтобы свойство видимости checkbuttons и radiobuttons было связано с bool "IsListItem", который я уже настроил с помощью конвертера BoolToVisibility со свойством IsInverted, чтобы переключать их назад и вперед.
Проблема в том, что я 'Я сталкиваюсь с тем, что я хочу, чтобы первый столбец DataGrid, который содержит флажки / радиокнопки, был связан с IsLineItem для ProductGroups (который является ItemsSource для ListBox. Но поскольку ItemsSource DataGrid связан с LineItems, DataContext из DataGrid являетсяустановлен на LineItems, и я не могу получить доступ к чему-либо за его пределами.
Вот некоторый код, чтобы помочь:
ListBox XAML:
<sdk:TabItem Header="Pmt" x:Name="Payment">
<Canvas x:Name="PaymentRoot" DataContext="{Binding Products.ProductGroups}">
<Rectangle Height="418" Canvas.Top="-14" Width="560" Style="{StaticResource MappingRectangleBG}" />
<StackPanel Canvas.Left="20" Canvas.Top="20" Width="520" Height="360">
<ListBox x:Name="lstProductGroups" ItemsSource="{Binding}" ItemTemplate="{StaticResource ProductListItem}" />
</StackPanel>
</Canvas>
</sdk:TabItem>
ListBox ItemTemplate XAML:
<sdk:DataGrid x:Name="dgLineItems" ItemsSource="{Binding LineItems}">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Select">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Visibility="{Binding IsListType, Converter={StaticResource boolToVisibilityConverter}}" />
<RadioButton Visibility="{Binding IsListType, Converter={StaticResource inverseBoolToVisibilityConverter}}" GroupName="{Binding GroupName}"/>
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn Header="Image">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding ImageUrl}" Height="50" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTextColumn Header="Item Name"
Binding="{Binding Name}" />
<sdk:DataGridTextColumn Header="Item Price"
Binding="{Binding Price}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</StackPanel>
</DataTemplate>
И мои объекты:
public class AllProducts
{
public IEnumerable<ProductOptionGroup> ProductGroups;
}
public class ProductOptionGroup
{
public string GroupName;
public IEnumerable<Product> LineItems;
public bool IsListType;
}
public class Product
{
public int ID;
public int OrdinalNumber;
public string Name;
public string Description;
public Decimal Price;
public string ImageUrl;
public CartItemType Type;
}
(MichaelS): я пытался установить его в DataContext родительского Canvas "PaymentRoot", но он ничего не делает для меня. Вот чтоЯ попробовал:
<CheckBox Visibility="{Binding ElementName=PaymentRoot, Path=DataContext.IsListType, Converter={StaticResource boolToVisibilityConverter}}" />
<RadioButton Visibility="{Binding ElementName=PaymentRoot, Path=DataContext.IsListType, Converter={StaticResource inverseBoolToVisibilityConverter}}" GroupName="{Binding ElementName=PaymentRoot, Path=DataContext.GroupName}"/>
(MichaelS): вот как это настроено на моей виртуальной машине: частные продукты AllProducts;
public AllProducts Products
{
get
{
return products;
}
set
{
//Products.ProductGroups[0].LineItems[0].
products = value;
RaisePropertyChanged("Products");
}
}