Я некоторое время пытался заставить это работать.
Я не думаю, что это дубликат, так как ни одна другая найденная мной статья не имела этой проблемы или не помогла мне решить мою, но еслиэто дубликат, я прошу прощения.
У меня есть UserControl, который наследуется от другого UserControl.Этот дочерний элемент должен отображать список элементов, которые отсутствуют или необходимы для других дочерних элементов моей базы.
C #:
public partial class EntitlementUserControl : BaseUserControl
{
public ObservableCollection<Entitlement> EntitlementCollection { get; set; } = new ObservableCollection<Entitlement>();
public EntitlementUserControl()
{
InitializeComponent();
this.DataContext = this;
EntitlementCollection.Add(new Entitlement("Test"));
}
}
EntitlementID здесь должен отображать «Тест», введенный в конструкторе..
WPF:
<ListView x:Name="entitlementList" ItemsSource="{Binding EntitlementCollection}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="5" HorizontalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=EntitlementID}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Это не работает для меня, я нашел этот , который объяснил, что мне нужен DataContext, но даже с этим он не 'не правильно отображать мои значения.Элемент отображается в ListView, но он пуст и не содержит никакого текста, рисунок ниже.Черный - мой ресурс стиля, потому что он выбран, чтобы показать, что создан один элемент.
Однако, если я изменю XAML, чтобы вместо него иметь Gridview в списке, он отображает мойданные, но моя цель - отформатировать данные, а не показывать сетку.
Работа Xaml с Gridview:
<ListView x:Name="entitlementList" ItemsSource="{Binding EntitlementCollection}" >
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding EntitlementID}"/>
</GridView>
</ListView.View>
</ListView>
Как видите, этоправильно показывает «Тест» в столбце ID.Однако я хочу показать список без каких-либо столбцов и применить желаемое форматирование.Есть идеи, почему первый способ не работает?
Право - это всего лишь небольшой класс, содержащий идентификатор и список продуктов.Право:
public class Entitlement
{
List<Product> products;
public List<Product> Products { get => products; set => products = value; }
public string EntitlementID { get => entitlementID; set => entitlementID = value; }
string entitlementID;
public void AddProduct(Product product)
{
Products.Add(product);
}
public Entitlement(string entitlementID)
{
products = new List<Product>();
this.entitlementID = entitlementID;
}
public override string ToString()
{
return EntitlementID;
}
}
Пожалуйста, дайте мне знать, если вам нужно больше кода.
Стиль, используемый для ListView (не сделан мной, предоставлен для меня):
<Style TargetType="{x:Type ListViewItem}" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="2"
SnapsToDevicePixels="true">
<Border x:Name="InnerBorder" CornerRadius="1" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition MinHeight="18"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Rectangle x:Name="UpperHighlight" Visibility="Collapsed" Fill="{StaticResource UpperReflection_Normal_BackgroundBrush}"/>
<GridViewRowPresenter Grid.RowSpan="2" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Grid>
</Border>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="{StaticResource FlatButton_MouseOver_BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource FlatButton_MouseOver_BorderBrush}"/>
<Setter Property="BorderBrush" TargetName="InnerBorder" Value="{StaticResource FlatButton_MouseOver_InnerBorderBrush}" />
<Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible"/>
</Trigger>
<!--<Trigger Property="Helpers:ItemDragState.IsUnderDragCursor" Value="True">
<Setter Property="Background" Value="{StaticResource ListViewItem_Hover_BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ListViewItem_Hover_BorderBrush}"/>
<Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible"/>
</Trigger>-->
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" Value="{StaticResource ListItemSelectedFill_BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ListItemSelectedFill_BorderBrush}"/>
<Setter Property="Foreground" Value="White" />
<Setter TargetName="InnerBorder" Property="BorderBrush" Value="{StaticResource ListViewItem_Selected_InnerBorderBrush}"/>
<Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible"/>
<Setter TargetName="UpperHighlight" Property="Fill" Value="#40FFFFFF"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Property="Selector.IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill_BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ListItemSelectedInactiveFill_BorderBrush}"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Property="IsMouseOver" Value="true"/>
</MultiTrigger.Conditions>
<Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill_BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ListItemSelectedHoverFill_BorderBrush}"/>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{StaticResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>