Как я могу использовать класс коллекции в качестве статического ресурса в Silverlight - PullRequest
5 голосов
/ 28 февраля 2011

У меня есть простой класс с именем Customer с двумя свойствами.
public Name {get;set;}<br/>public LastName {get;set}
Затем я создал коллекционный класс с именем CustomerList только с одним открытым свойством с именем Customers

public class CustomerList
{
    public List<Customer> Customers { get; set; }

    public CustomerList()
    {
        Customers = new List<Customer>();
        Customers.Add(new Customer() { Name = "Foo", LastName = "Bar" });
        Customers.Add(new Customer() { Name = "Foo1", LastName = "Bar1" });
    }
}

Теперь я хочу использовать этот класс в качестве статического ресурса в XAML.

  <UserControl.Resources> 
  <customers:CustomerList x:Key="CustomersKey">
  </UserControl.Resources>

, а затем использовать его в ListBox

 <ListBox x:Name="lvTemplate" ItemsSource="{Binding Source={StaticResource CustomersKey}}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBox Text="{Binding Name}"/>
                    <TextBox Text="{Binding LastName}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

если я установлю ItemsSource в коде, то после создания экземпляра класса все будет работать нормально. Если я попытаюсь установить его из XAML и статического ресурса, ничего не произойдет. даже если я использую {Binding Path=Customer.Name} или {Binding Path=Name}.

Я явно что-то упускаю ...

1 Ответ

5 голосов
/ 28 февраля 2011

Поскольку CustomerList фактически не является списком элементов (не реализует IEnumerable), вам необходимо указать, какое свойство внутри объекта вы хотите использовать в качестве ItemsSource.

<ListBox ItemsSource="{Binding Path=Customers, Source={StaticResource CustomersKey}}">
...