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