Лучшие практики для разделения свойства между элементами элемента управления - PullRequest
1 голос
/ 20 февраля 2010

Допустим, у меня есть элемент ItemsControl на холсте.

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

Прямо сейчас я вижу 2 решения.

  1. Всякий раз, когда меняются настройки, я обновляю свойство width для каждого элемента. Недостатком является то, что для этого требуется больше ресурсов, чем необходимо, но теперь представление для каждого элемента просто привязывается к этому свойству.
  2. Я добавляю свойство Width в ViewModel, которое связано с элементом управления, содержащим элементы. Я даю ItemControl имя (например, «MyItemsContainer»). Теперь каждый предмет может получить к нему через: {Binding ElementName=MyItemsContainer, Path=DataContext.Width}

Недостатками второго решения являются добавленные зависимости. Прежде всего, должен существовать ItemsControl с этим именем (что делает невозможным использование элемента с другим именем ItemsControl), а DataContext ItemsControl должен иметь свойство Width.

Мне было бы интересно найти альтернативные решения или узнать, что люди делали с любым решением.

1 Ответ

1 голос
/ 20 февраля 2010

Если вы устраните избыточность, объявив свойства на максимально возможном уровне (т. Е. Модель родительского представления), вы можете:

  • Имейте детскую модель для каждого элемента в вашем ItemsControl. Эта модель дочернего представления также может предоставлять те же свойства, но перенаправлять весь доступ к модели родительского представления. Обратите внимание, что для этого модели дочерних представлений также должны пересылать события изменения свойств из модели родительского представления. Вы можете использовать Ферма , чтобы сделать это намного проще, привязав свойство ребенка к родительскому.
  • Пусть ваш взгляд использует Binding с RelativeSource вместо ElementName, чтобы вы, по крайней мере, исключили зависимость от конкретного имени ItemsControl.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...