Проблема Привязки ObservableCollection к ListBox в WPF / MVVM - PullRequest
0 голосов
/ 31 мая 2010

Я работаю над некоторым кодом, использую wpf и начинаю использовать mvvm. Пока что у меня нет проблем, когда у меня есть один элемент, и я должен показать его значения на экране (привязка конкретного имени свойства). Но теперь я должен работать со списком свойств, не зная его имен. Поэтому я создал класс с именем GClass, который имеет только два свойства: имя и значение. Я создал ObservableCollection, и на данный момент заполняю прямыми значениями, и сопоставляю текстовый вид view (lstview) с созданным мной объектом. Но я не вижу никакого результата, он всегда показывает пустой список. Может кто-нибудь сказать мне, если посмотреть, почему это происходит?

Код C #

         VDt = new ObservableCollection<GClass>();
        var vhDt = message.SelectSingleElement(typeof (Vh)) as Vehiculo;

        if(vhDt != null)
        {
            VDt.Add(new GClass() {Name = "Numero: ", Value =  ""});
            VDt.Add(new GClass() {Name = "Marca: ", Value = ""});
            VDt.Add(new GClass() {Name = "Conductor: ", Value = ""});

            lstview.DataContext = this;
            _regionManager.RegisterViewWithRegionInIndex(RegionNames.MainRegion, lstview, 0); 

код вида

 <ListBox Margin="5,5,5,25" ItemsSource="{Binding VDt}">
        <ListBox.Template>
            <ControlTemplate>                    
                <ListViewItem Content="{Binding Name}"></ListViewItem> 
               <ListViewItem Content="{Binding Value}"></ListViewItem>
            </ControlTemplate>
        </ListBox.Template>
    </ListBox>

У меня есть исследование, но я не вижу, что я делаю не так. Я буду признателен, если кто-нибудь поможет мне.

1 Ответ

1 голос
/ 01 июня 2010

Несколько вещей здесь:

Во-первых, <ListBox.Template> позволяет вам описать шаблон для того, как вы хотите нарисовать сам список. То, что вы пытаетесь сделать (по-видимому), визуализировать элементы в списке, поэтому вам нужно <ListBox.ItemTemplate>

Во-вторых, внутри ItemTemplate вам нужно создать не <ControlTemplate>, а <DataTemplate>

Последнее: лично я использовал бы в своих шаблонах данных соответствующие элементы управления для визуализации представлений (например, TextBlocks вместо ListViewItems)

Так что ваш xaml должен выглядеть примерно так:

<ListBox Margin="5,5,5,25" ItemsSource="{Binding VDt}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" />
                <TextBlock Text="{Binding Value}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Надеюсь, это поможет :) Ian

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