Подтвердить что ты не робот

Как связать свойство управления WPF только для чтения (например, ActualWidth), чтобы его значение было доступно в модели представления?

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

Каков наилучший способ сделать это?

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

Я бы просто использовал Mode=OneWayToSource, но это не работает для свойств только для чтения:

  <Border
      ...
      ActualWidth="{Binding MyDataModelWidth, Mode=OneWayToSource}"
      >
      ... child controls ...
  </Border>

То, как я делаю это в настоящее время, - это обработать SizeChanged для границы, а код-загладит это значение в модели представления, но это не совсем правильно.

Кто-нибудь уже решил эту проблему?

UPDATE: Мой вопрос фактически является дубликатом этого: Нажатие свойств GUI только для чтения обратно в ViewModel

4b9b3361

Ответ 2

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

Однако данное решение для создания передатчика для передачи проверки не будет работать в вашем случае.

Я думаю, что это нормально, чтобы вызвать метод в ViewModel. Если этот код за частью, который вас беспокоит, возможно, вы можете использовать интерактивность для вызова метода на основе триггера события (SizeChanged).

Ответ 3

Вам действительно нужна привязка для этого?

    class MyVM
    {
        FrameworkElement _context;

        public MyVM(FrameworkElement context)
        {
            _context = context;
        }

        public double Width
        {
            get { return _context.ActualWidth; }
        }
    }