универсальный словарь silverlight 4 {привязка} к списку (элементы не отображаются) - PullRequest
1 голос
/ 14 мая 2011

Мой xaml ...

<ListBox Margin="6,35,6,6" Name="lbLayers" SelectionMode="Extended"    >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <TextBlock Text="{Binding Key,Mode=TwoWay}" />
                <TextBlock Text="{Binding Value.Visible,Mode=TwoWay,StringFormat='Visible: {0}'}"  />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox> 

.. и мой код ...

   void GameEvents_MapCreated(object sender, Zider.EventArgs.MapEventArgs e)
    {
        HookMapLayerEvents(false);
        this.map = e.Map;
        HookMapLayerEvents(true);
         this.lbLayers.ItemsSource = this.map.Layers;
    }

this.map.layers - это универсальный словарь типа (string, MapLayer(Плитка))

Когда я устанавливаю ItemSource в списке, в словаре нет элементов, с которых можно было бы начать.Когда я нажимаю кнопку, то есть когда я добавляю слой карты в

this.map.Layers.Add("key", new MapLayer<Tile>());

Также MapLayer реализует INotifyPropertyChanged для своих свойств.

На мой взгляд, я не могу получитьэлементы для отображения в списке.

1 Ответ

2 голосов
/ 14 мая 2011

Проблема в том, что значение map.Layers не изменяется, а Dictionary<TKey, TValue> не реализует интерфейс INotifyCollectionChanged. Следовательно, ListBox не может знать, что любой новый элемент доступен для отображения.

Если возможно, попробуйте изменить свойство Layers, чтобы вместо него отображалось ObservableCollection<T>.

Конечно, это может быть проблемой, если у вас должен быть словарь. Если вы заинтересованы только в обеспечении уникальных записей, вы можете использовать HastSet ключей для управления этим. Если вам нужен Ключ для поиска, тогда, если есть несколько пунктов, последовательный поиск должен работать достаточно хорошо.

Полноценное решение может заключаться в реализации ObservableDictionary с интерфейсами IDictionary<TKey, TValue> и INotifyCollectionChanged. Если вы ищете «ObservableDictionary Silverlight», есть несколько примеров, просто будьте осторожны, чтобы они действительно реализовали правильные интерфейсы, не очень хорошо, если он «наблюдаемый», но не совместим с ItemsSource.

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