Получение индекса элемента списка через вложенное свойство - PullRequest
1 голос
/ 12 января 2009

Используя эту публикацию в качестве ссылки, я пытаюсь отобразить индекс элемента Listbox путем реализации присоединенного свойства. Я буду первым, кто признает, что я не совсем понимаю, как присоединенное свойство решит эту проблему, но я надеялся, что это станет ясно после успешной реализации решения. Потратив бесчисленное количество часов на решение этой проблемы, я ищу небольшую помощь, будь то через пристроенную собственность или нет. На данный момент он использует строку по умолчанию («По умолчанию»), но, похоже, не оценивает другие функции. Вот что у меня есть:

В WPF:

<TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}},
                                                Mode=OneWay, 
                                                Path=(Silhouette_Controls_ThumbnailListbox:ListBoxItemIndex.ItemIndex)}"
                                       TextAlignment="Center"
                                       VerticalAlignment="Bottom" 
                                       HorizontalAlignment="Center" />

Класс свойств зависимости в C #

public class ListBoxItemIndex : DependencyObject
    {
        public static readonly DependencyProperty ItemIndexProperty = 
            DependencyProperty.RegisterAttached(
                "ItemIndex",
                typeof(string),
                typeof(ListBoxItemIndex),
                new PropertyMetadata("Default", new PropertyChangedCallback(OnItemIndexChanged)));

        public static string GetItemIndex(DependencyObject element)
        {
            return (string)element.GetValue(ItemIndexProperty);
        }

        public static void SetItemIndex(DependencyObject element, string value)
        {
            element.SetValue(ItemIndexProperty, value);
        }

        private static void OnItemIndexChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ListBoxItem item = d as ListBoxItem;

            ListBox view = ItemsControl.ItemsControlFromItemContainer(item) as ListBox;

            int index = view.ItemContainerGenerator.IndexFromContainer(item);
        }
    }

1 Ответ

1 голос
/ 13 января 2009

Не думаю, что в этом случае вам поможет прикрепленное свойство. Ваше присоединенное свойство всегда будет иметь значение «По умолчанию», так как я не думаю, что вы устанавливаете свойство на что-то другое. OnItemIndexChanged вызывается только в том случае, если свойство ItemIndex было изменено с помощью Binding или непосредственно в XAML или коде.

Я бы использовал конвертер значений так же, как и ссылку, которую вы разместили выше.

В MSDN есть пример создания значения onverter: http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

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