WPF: установите свойство привязки для привязки поля списка

Размер примитивных данных является частью спецификация виртуальной машины, и не изменяется. То, что изменится, является размером ссылок на объект от 32 битов до 64. Так, та же программа потребует большей памяти на JVM на 64 бита. Влияние, которое это оказывает, зависит от Вашего приложения, но может быть значительным.

12
задан Dave Clemmer 16 August 2011 в 16:59
поделиться

4 ответа

вам не нужно указывать шаблон, вы можете просто использовать свойство DisplayMemberPath, например:

<ListBox ItemsSource="{Binding SomeCollection}" DisplayMemberPath="ThePropertyOnElm" />

надеюсь, что это поможет!

32
ответ дан 2 December 2019 в 03:18
поделиться

Я думаю, что это то, что вы хотите сделать:

<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).

я не пытался скомпилировать это, поэтому он может быть не совсем верный. если он не даст мне знать и я приму дополнительные меры!

11
ответ дан 2 December 2019 в 03:18
поделиться

Используйте свойство привязки 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} и т. Д.

2
ответ дан 2 December 2019 в 03:18
поделиться

Вот пример, который я недавно опубликовал в 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.

1
ответ дан 2 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: