Вопрос

Я пытаюсь создать облако тегов в WPF на основе существующая реализация [Скачать источник] Я не полностью понял реализацию, и моя проблема заключается в том, что вместо того, чтобы разобраться с количеством элементов в коллекции, я хочу связать ее с некоторыми другими значениями, содержащимися в классе. Итак, в этой части здесь,

FontSize="{Binding Path=ItemCount, Converter={StaticResource CountToFontSizeConverter}}"

Я хочу связать размер с чем -то другим. Как я могу это сделать? Где принадлежит Itemcount?

Спасибо

Это было полезно?

Решение

ItemCount принадлежит к группа Внутри вида коллекции, который генерируется из этого тега.

например, если у меня есть список

AABBBC

И я группирую их, я получаю:

Группа A: itemcount = 2
Группа B: itemCount = 3
Группа C: itemcount = 1

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


Чтобы ответить на ваши комментарии, настройка с голой кости должна быть чем-то вроде этого:

<ItemsControl ItemsSource="{Binding Data}">
    <ItemsControl.Resources>
        <vc:CountToFontSizeConverter x:Key="CountToFontSizeConverter"/>
    </ItemsControl.Resources>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}" Margin="2"
                       FontSize="{Binding Count, Converter={StaticResource CountToFontSizeConverter}}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Я предполагаю, что ваш класс-объект данных раскрывает свойства Name а также Count, чтобы убедиться, что изменения размера по мере увеличения количества, которые необходимо реализовать класс-объект данных. INotifyPropertyChanged, это все, что есть для этого.

public class Tag : INotifyPropertyChanged
{
    private string _name = null;
    public string Name
    {
        get { return _name; }
        set
        {
            if (_name != value)
            {
                _name = value;
                OnPropertyChanged("Name");
            }
        }
    }

    private int _count = 0;
    public int Count
    {
        get { return _count; }
        set
        {
            if (_count != value)
            {
                _count = value;
                OnPropertyChanged("Count");
            }
        }
    }

    //...

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

Другие советы

ItemCount - это свойство любого экземпляра, содержащегося в свойстве DataContext объекта WPF, который вы хотите изменить. В дереве иерархии все от FrameworkElement В дальнейшем наследуют свойство «датчантекстое контекст».

С "Снуп" Вы можете заглянуть в дерево пользовательского интерфейса приложения WPF во время выполнения и, например, выяснить, какие объекты живут в вашем данных DataContext в любой момент времени.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top