Laden...

WPF: Xaml Array problem

Erstellt von lord_fritte vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.002 Views
L
lord_fritte Themenstarter:in
553 Beiträge seit 2007
vor 14 Jahren
WPF: Xaml Array problem

Hallo ich möchte ein Array im Xaml Code deklarieren, wie in diesem Beispiel.
Im Designer klappt das ganz gut, aber sobald ich das Programm starte, ist die ListBox leer, warum?


<Window x:Class="WpfSamples3.Samples.general.CollectionsSample"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:this="clr-namespace:WpfSamples3.Samples.general"
    Title="CollectionsSamples" Height="300" Width="300">
    <Window.Resources>
        <x:Array x:Key="PersonenList1" Type="{x:Type this:Person}">
            <this:Person Name="Herweg" Vorname="Tobias" Alter="23" />
            <this:Person Name="Follmann" Vorname="Tanja" Alter="20" />
            <this:Person Name="Müller" Vorname="Frank" Alter="25" />
            <this:Person Name="Bauer" Vorname="Silke" Alter="22" />
        </x:Array>
        <DataTemplate x:Key="PersonenTemplate1">
            <TextBlock Text="{Binding Path=Name}"/>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <StackPanel VerticalAlignment="Top">
            <ListBox ItemTemplate="{StaticResource PersonenTemplate1}">
                <ListBox.ItemsSource>
                    <Binding Source="{StaticResource PersonenList1}" Path="Items"/>
                </ListBox.ItemsSource>
            </ListBox>
        </StackPanel>
    </Grid>
</Window>


public class Person
  {
    string _sName = "";
    string _sVorname = "";
    int _iAlter = 0;

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

    public string Vorname
    {
      get { return _sVorname; }
      set { _sVorname = value; }
    }

    public int Alter
    {
      get { return _iAlter; }
      set { _iAlter = value; }
    }
  }

5.742 Beiträge seit 2007
vor 14 Jahren

Hallo lord_fritte,

schaue mal in das Outputfenster - da sollte etwas stehen wie "Der Typ Array definiert keine Property "Items"".

Ersetze mal bei dem

<Binding Source="{StaticResource PersonenList1}" Path="Items"/>

den Wert für Path durch einen Punkt.
Dann sollte es eigentlich funktionieren.

BTW: Du hättest das Binding auch als String formulieren können.

L
lord_fritte Themenstarter:in
553 Beiträge seit 2007
vor 14 Jahren

Danke, aber wie kommt es dass es mit Items im Designer geht, aber nicht im Programm, und mit . nicht im Designer, aber im Programm?
Aber im Ausgabefenster wird kein Hinweis darauf angezeigt, dass es kein Items Property gibt.

446 Beiträge seit 2004
vor 14 Jahren

[Edit] hoppla ich habe die antworten zu schnell überlesen winsharp hat das gleiche...
Hallo,

du greifst auf eine Resource zu.

Deshalb muss das Binding so aussehen:


<Window.Resources>
        <x:Array x:Key="StringArray" Type="{x:Type sys:String}">
            <sys:String>asedf</sys:String>
            <sys:String>asaasdfdf</sys:String>
            <sys:String>asaasadfdf</sys:String>
        </x:Array>

    </Window.Resources>
    <Window.Content>

            
            <ListBox ItemsSource="{Binding Source={StaticResource StringArray}}"></ListBox>...

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp