Размер примитивных данных является частью спецификация виртуальной машины, и не изменяется. То, что изменится, является размером ссылок на объект от 32 битов до 64. Так, та же программа потребует большей памяти на JVM на 64 бита. Влияние, которое это оказывает, зависит от Вашего приложения, но может быть значительным.
вам не нужно указывать шаблон, вы можете просто использовать свойство DisplayMemberPath, например:
<ListBox ItemsSource="{Binding SomeCollection}" DisplayMemberPath="ThePropertyOnElm" />
надеюсь, что это поможет!
Я думаю, что это то, что вы хотите сделать:
<ListBox ItemsSource="{Binding SomeCollection}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:YourDataType}">
<TextBlock Text="{Binding ThePropertyOnElm}" />
</ControlTemplate>
</ListBox.ItemTemplate>
</ListBox>
Шаблон для ListBox изменяет внешний вид окна списка, а шаблон элемента будет управлять тем, как отдельные элементы в список будет выглядеть. Я изменил контрольный шаблон на DataTemplate и назначил его типу YourDataType. Кроме того, я использовал текстовый блок в шаблоне данных вместо listboxitem, так как datatemplate назначается элементу listbox (который должен содержать некоторый тип содержимого вместо другого элемента listbox).
я не пытался скомпилировать это, поэтому он может быть не совсем верный. если он не даст мне знать и я приму дополнительные меры!
Используйте свойство привязки Path:
<ListBox ItemsSource="{Binding SomeCollection}">
<ListBox.Template>
<ControlTemplate>
<ListViewItem Content="{Binding Path=ThePropertyOnElm}"></ListViewItem>
</ControlTemplate>
</ListBox.Template>
</ListBox>
Примечание. Причина несколько сбивающего с толку имени (Path) заключается в том, что его можно расширить до вложенных свойств и т. Д. Итак, если ThePropertyOnElm
свойство возвращает объект со свойством под названием Name
, вы можете написать {Binding Path = ThePropertyOnElm.Name}
и т. Д.
Вот пример, который я недавно опубликовал в Code Project:
<Window
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/2006"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
x:Class="GameSampleApp.Window1"
x:Name="Window"
Title="Sample App"
Width="380" Height="240">
<Window.Resources>
<Style TargetType="ListBox">
<Setter Property="Control.FontFamily" Value="Tahoma" />
<Setter Property="Control.FontSize" Value="10" />
</Style>
<Style x:Key="FontStyle">
<Setter Property="Control.FontFamily" Value="Verdana" />
<Setter Property="Control.FontStyle" Value="Italic" />
<Setter Property="Control.FontSize" Value="12"/>
</Style>
<DataTemplate x:Key="GamePersonTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Width="40" Grid.Column="0" Text="{Binding Name, Mode=OneWay}" />
</Grid>
</DataTemplate>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<ListBox Padding="3" HorizontalAlignment="Left" Width="Auto"
ItemTemplate="{DynamicResource GamePersonTemplate}"
ItemsSource="{Binding}" VerticalAlignment="Top" Height="Auto"/>
</Grid>
</Window>
В этом примере , Я установил ItemsSource так, чтобы он указывал на привязку контекста данных, которая может находиться в любом месте визуального дерева. Шаблон элемента определен в Window.Resources, но с таким же успехом может быть определен в отдельном ResourceDictionary. По сути, в этом шаблоне элементов будет отображаться один текстовый блок для каждой строки элементов, но при необходимости его можно сделать гораздо сложнее; в этом вся прелесть WPF.