none
Какая компоновка здесь более правильная? RRS feed

  • Вопрос

  • WPF C#.

    Подскажите пожалуйста, как правильнее это закомпоновать в xaml. Входящие сообщения слева исходящие справа. Ну и последовательность их по времени вниз

    1) ListView с шаблонами

    2) Canvas с Grid- ами или TextBlock -ами привязанные к Canvas.Left

    Спасибо


    • Изменено DevingAs 24 февраля 2016 г. 4:38
    24 февраля 2016 г. 4:35

Ответы

  • Ни в коем случае не Canvas!!!

    Нужен элемент наследник ItemsControl. Какой зависит от функционала. Далее выравнивание вы можете делать двумя способами - либо селектор шаблонов, либо конвертер. В любом случае в классе являющимся телом одного сообщение нужно свойство "тип сообщения" с вариантами значения "мне" или "от меня". Либо еще проще - поле IsMyMessage типа Boolean  и по True или False можно понять какой тип сообщения.

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


    VB.Net - WPF, UWP

    • Помечено в качестве ответа DevingAs 24 февраля 2016 г. 12:39
    24 февраля 2016 г. 10:18
    Отвечающий
  • Ах да забыл про вторую часть вопроса. Опять же используя ItemsControl мы можем привязываться к коллекции сообщений через CollectionViewSource и с ее помощью и сортировать и группировать сообщения. То есть вы всего в пару строчек кода сделаете, что бы сообщения шли в порядке появления новых, при этом было разделение на дату, как на картинке.

    VB.Net - WPF, UWP

    • Помечено в качестве ответа DevingAs 24 февраля 2016 г. 12:39
    24 февраля 2016 г. 10:24
    Отвечающий
  • Добрый день.

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

    • Помечено в качестве ответа DevingAs 24 февраля 2016 г. 12:39
    24 февраля 2016 г. 10:27
    Отвечающий

Все ответы

  • Ни в коем случае не Canvas!!!

    Нужен элемент наследник ItemsControl. Какой зависит от функционала. Далее выравнивание вы можете делать двумя способами - либо селектор шаблонов, либо конвертер. В любом случае в классе являющимся телом одного сообщение нужно свойство "тип сообщения" с вариантами значения "мне" или "от меня". Либо еще проще - поле IsMyMessage типа Boolean  и по True или False можно понять какой тип сообщения.

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


    VB.Net - WPF, UWP

    • Помечено в качестве ответа DevingAs 24 февраля 2016 г. 12:39
    24 февраля 2016 г. 10:18
    Отвечающий
  • Ах да забыл про вторую часть вопроса. Опять же используя ItemsControl мы можем привязываться к коллекции сообщений через CollectionViewSource и с ее помощью и сортировать и группировать сообщения. То есть вы всего в пару строчек кода сделаете, что бы сообщения шли в порядке появления новых, при этом было разделение на дату, как на картинке.

    VB.Net - WPF, UWP

    • Помечено в качестве ответа DevingAs 24 февраля 2016 г. 12:39
    24 февраля 2016 г. 10:24
    Отвечающий
  • Добрый день.

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

    • Помечено в качестве ответа DevingAs 24 февраля 2016 г. 12:39
    24 февраля 2016 г. 10:27
    Отвечающий
  • В итоге я сделал примерно как LXGDARK сказал. Так мне проще: поле в базе, там я сохраняю ID отправителя и далее сравниваю моё  или нет. Всё чудесно.

    Но загрустил я. :(

    Решил просто почитать про DataTemplateSelector. Оказывается DataTemplate можно менять динамически. Это вообще не к этому вопросу,а вообще. :) Если б знал я это раньше. аааааааааааааа сколько времени тогда убил зря. ааааааааааааа. :)

    24 февраля 2016 г. 12:46
  • Решил просто почитать про DataTemplateSelector. Оказывается DataTemplate можно менять динамически. Это вообще не к этому вопросу,а вообще. :) Если б знал я это раньше. аааааааааааааа сколько времени тогда убил зря. ааааааааааааа. :)

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

    Селектор лучше использовать, когда шаблон данных меняется в корне в зависимости от некоторого значения. Если же меняется что то одно (или пара) внутри шаблона, то мне удобнее привязка-конвертер.


    VB.Net - WPF, UWP

    25 февраля 2016 г. 6:41
    Отвечающий
  •  Если же меняется что то одно (или пара) внутри шаблона, то мне удобнее привязка-конвертер.


    У меня на такой случай "до вчерашнего дня" было столько и шаблонов, сколько вариантов изменений :) Причём подавляющее большинство шаблонов не в xaml а в C#. :)

    Сейчас переделываю в очередной раз. Больше переделываю, чем вперёд двигаюсь.

    25 февраля 2016 г. 8:10
  • Сейчас переделываю в очередной раз. Больше переделываю, чем вперёд двигаюсь.

    Это не плохо. Знаете как я делаю новый проект? "Тааак мне нужно такое то поведение, ага это у меня было в проекте Х. Теперь такая то задача - ок берем это из проекта Y."

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


    VB.Net - WPF, UWP

    25 февраля 2016 г. 8:15
    Отвечающий