Привязка показывает тип, а не значение - PullRequest
0 голосов
/ 13 ноября 2010

Эй. У меня возникли проблемы с привязкой в ​​XAML. У меня есть список Player объектов. Я хотел бы, чтобы этот список был привязан к ListBox и отображал Name из Player. В данный момент поле списка заполняется Red.Player (то есть тип объекта и пространство имен). Мой стиль словаря ресурсов выглядит следующим образом:

<Style x:Key="PlayerListBox" TargetType="ListBoxItem">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="BorderBrush" Value="Transparent"/>
        <Setter Property="Padding" Value="0"/>
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="VerticalContentAlignment" Value="Top"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}" d:DesignWidth="231" d:DesignHeight="50">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="MouseOver"/>
                                <VisualState x:Name="Disabled">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="LayoutRoot">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource TransparentBrush}"/>
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="SelectionStates">
                                <VisualState x:Name="Unselected"/>
                                <VisualState x:Name="Selected"/>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <TextBlock TextWrapping="Wrap" Text="{Binding}" FontSize="29.333" TextAlignment="Center"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Я думаю, основная часть такова:

<TextBlock TextWrapping="Wrap" Text="{Binding}" FontSize="29.333" TextAlignment="Center"/>

Я пытался использовать Text="{Binding Name}", но потом ничего не появлялось. Я устанавливаю ItemsSource, когда пользователь выбрал плеер:

PlayerList.ItemsSource = ListofPlayers;

Спасибо за любую помощь

Ответы [ 3 ]

2 голосов
/ 13 ноября 2010

Является ли Name общедоступным свойством для типа, к которому вы привязаны?

т.е.

public class Person
{
    string name;
    int age;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public int Age
    {
        get { return age; }
        set { age = value; }
    }

}

Пример проекта, демонстрирующий привязку данных к списку.

привязка источника данных Linq к списку

1 голос
/ 14 ноября 2010

Используйте свойство de ListBox.ItemTemplate, чтобы установить способ отображения данных относительно свойств.

Например.

<ListBox.DataTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding Name}" />
    </DataTemplate>
</ListBox.DataTemplate>
0 голосов
/ 13 ноября 2010

Если вы хотите использовать {Binding} без указания свойства, вы можете переопределить ToString (), чтобы вернуть текст, который вы хотите отобразить.

...