wpf создает динамически активируемую "сетку" - PullRequest
0 голосов
/ 09 августа 2010

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

Из БД я получаю размер "сетки", которую я должен создать, например 2x3. Теперь я хочу разместить «элемент» в этой сетке, который занимает одно или несколько мест.

В настоящее время я пытаюсь сделать это с ItemsControl, который содержит сетку (я хочу сетку, потому что я хочу использовать ShowGridLines = "True") Но как мне создать динамическую сетку? Мысль об использовании равномерной сетки, но у нее нет ShowGridLines ...

Вторая проблема (так как я новичок mvvm) - это выбор места в сетке. Тот, который вы нажмете, не будет проблемой. Проблема в том, что предмет, который вы пытаетесь разместить, занимает два места. Как мне узнать, какое место находится рядом с тем, на которое я нажимаю?

Любая помощь приветствуется

1 Ответ

2 голосов
/ 09 августа 2010

Поскольку вы не можете легко связать определения строк / столбцов Grid , я предлагаю вам создать простой пользовательский элемент управления, который наследуется непосредственно от Grid .

* 1006.* Вот мой подход с тремя дополнительными свойствами зависимости:
  • int MyColumnCount
  • int MyRowCount
  • ObservableCollection MyChilds

MyColumnCount /MyRowCount будет привязан к свойствам в модели представления, которую вы обновляете, когда получаете новые значения из базы данных.Также ViewModel предоставит коллекцию FrameworkElements, которая будет элементами в Grid и связана с MyChilds.

Вы можете создавать новые элементы управления в ViewModel и использовать свойство присоединенного элемента Grid, чтобы установитьПозиция.Например:

TextBlock b = new TextBlock() { Text = "Hello World!" };
Grid.SetRow(b, <your position>);
Grid.SetColumn(b, <your position>);
Grid.SetColumnSpan(b, <your column span>);
MyChilds.Add(b);

В PropertyChangedCallbacks новых int свойств вы изменяете определения строк / столбцов в соответствии с новыми значениями.Обратный вызов свойства коллекции регистрирует событие изменения коллекции в новой коллекции ObservableCollection и добавляет новые элементы к дочерним элементам сетки при изменении событий.

Это все, что вам нужно для динамических изменений сетки.

На ваш второй вопрос: это довольно просто.В случае, если вы поймали, вы получите отправителя выбранного элемента в сетке.Отправитель - это, в основном, элемент управления с прямым щелчком.Вы можете снова использовать статические функции Grid, чтобы вычислить позицию:

Grid.GetRow(item);
Grid.GetColumn(item);
Grid.GetColumnSpan(item);

С общим количеством строк / столбцов сетки (My ... Count) вы можете вычислить соседние позиции.

Jan

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