0

それで、私は最終的に WinForms から WPF に移行することに決めました。私は非常に興味深い旅をしています。を にバインドする単純なアプリケーションがありObservableCollectionますListBox

私はAnimalエンティティを持っています:

namespace MyTestApp
{
    public class Animal
    {
        public string animalName;
        public string species;

        public Animal()
        {
        }

        public string AnimalName { get { return animalName; } set { animalName = value; } }
        public string Species { get { return species; } set { species = value; } }
    }
}

そしてAnimalListエンティティ:

namespace MyTestApp
{
    public class AnimalList : ObservableCollection<Animal>
    {
        public AnimalList() : base()
        {
        }
    }
}

そして最後に、これが私のメインウィンドウです:

<Window x:Class="MyTestApp.Window3"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MyTestApp"
    Title="Window3" Height="478" Width="563">

<Window.Resources>
    <local:AnimalList x:Key="animalList">
        <local:Animal AnimalName="Dog" Species="Dog"/>
        <local:Animal AnimalName="Wolf" Species="Dog"/>
        <local:Animal AnimalName="Cat" Species="Cat"/>
    </local:AnimalList>    
</Window.Resources>

<Grid>
    <StackPanel Orientation="Vertical" Margin="10,0,0,0">
        <TextBlock FontWeight="ExtraBold">List of Animals</TextBlock>
        <ListBox ItemsSource="{Binding Source={StaticResource animalList}, Path=AnimalName}"></ListBox>
    </StackPanel>
</Grid>

アプリケーションを実行すると、リストボックスに "Dog"、"Wolf"、"Cat" の代わりに "D"、"o"、"g" の 3 つの項目が表示されます。

ここに画像の説明を入力

私はどこかで何か愚かなことをしているような気がします (AnimalList コンストラクターでしょうか?) が、それが何なのかわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

1

(バインディングの Path プロパティではなく) DisplayMemberPath を設定する必要があります。

<Grid>
    <StackPanel Orientation="Vertical" Margin="10,0,0,0">
        <TextBlock FontWeight="ExtraBold">List of Animals</TextBlock>
        <ListBox ItemsSource="{Binding Source={StaticResource animalList}}" DisplayMemberPath="AnimalName"></ListBox>
    </StackPanel>
</Grid>

Animal オブジェクトのリストにバインドしているため、DisplayMemberPathは、リスト項目として表示する Animal クラスのプロパティの名前を指定します。

プロパティ自体がオブジェクトの場合は、ドット表記を使用して、表示するプロパティへのフル パスを指定できます。

<ListBox ItemsSource="{Binding Source={StaticResource animalList}}" DisplayMemberPath="PropertyInAnimalClass.PropertyInTheChildObject.PropertyToDisplay" />
于 2013-04-25T22:30:32.047 に答える