WPF ComboBox переплет - PullRequest
       11

WPF ComboBox переплет

0 голосов
/ 02 мая 2010

Вот мир кода XAML с моей страницы:

            <ComboBox Grid.Row="2" Grid.Column="1" Name="Player2" MinWidth="50"
                ItemsSource="{Binding PlayersTest}" DisplayMemberPath="ShortName">

Пользовательский объект привязан к контексту данных страницы:

        page.DataContext = new SquadViewModel();

Вот часть исходного кода класса 'SquadViewModel':

public class SquadViewModel
{
    public SquadViewModel()
    {
        PlayersTest = new ObservableCollection<SostavPlayerData>();
        PlayersTest.Add(new SostavPlayerData { ShortName = "A. Sereda", });
        PlayersTest.Add(new SostavPlayerData { ShortName = "D. Sereda", });
    }

    public readonly ObservableCollection<SostavPlayerData> PlayersTest;

    public string TestText { get { return "Binding works perfectly!"; } }
}

В результате ComboBox должен отобразить список объектов, но он пуст.

Знаете ли вы, почему и как получить этот список?

Спасибо.

P.S. Я пробовал другую разметку XAML

            <ComboBox Grid.Row="1" Grid.Column="1" Name="Player1" MinWidth="50"
                ItemsSource="{Binding PlayersTest}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding ShortName}"/>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

Это также не работает, но привязка к простому текстовому блоку:

        <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding TestText}"/>

Отлично работает.

1 Ответ

3 голосов
/ 02 мая 2010

Проблема в том, что PlayersTest - это поле, а не свойство. Привязка работает только со свойствами. Вы можете объявить его, используя синтаксис свойства auto, чтобы код в вашей модели представления был похож:

public ObservableCollection<SostavPlayerData> PlayersTest { get; private set; }

Тогда вам просто нужно установить для него новый экземпляр ObservableCollection<SostavPlayerData>, и все будет готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...