@Ignatiy2

Можно ли во ViewModel узнать ширину элемента View?

Например, у меня есть кнопка по нажатию на которую я хочу вывести через MessageBox ее размеры. И сделать это мне я хочу во ViewModel. Но насколько я понимаю, ViewModel ничего не должна знать про View. Если это так, то тогда где и как можно реализовать этот вывод размеров?
  • Вопрос задан
  • 138 просмотров
Решения вопроса 2
FoggyFinder
@FoggyFinder
Зависит от того зачем вам нужна информация о размерах UI - элементов.

Если это часть пользовательских настроек, то хранить их на уровне ViewModel совершенно нормально и никак не противоречит паттерну.

Но если это нужно исключительно для временной настройки UI, то и код должен находится на уровне View.

Для вашего примера решение будет таким: добавьте обработчик события клика на кнопку и выводить информацию там.

MVVM это не означает что в code-behind не должно быть никакого кода. Это типичная ошибка. В .xaml.cs не должно быть того, что не относится непосредственно к отображению.

Управление анимацией, вывод вспомогательных сообщений, кастомизация пользовательских элементов управления - все это может быть там.
Ответ написан
Комментировать
SpacePurr
@SpacePurr
c#, wpf
Не знаю насколько это противоречит паттерну, но с ходу пришло такое решение.

View:
<Button x:Name="MyButton" Command="{Binding ClickCommand}" 
CommandParameter="{Binding ElementName=MyButton}"/>


ViewModel:
public class MainViewModel : BaseViewModel
{
    public Command ClickCommand { get; set; }

    public MainViewModel()
    {
        ClickCommand = new Command(ClickCommandExecute);
    }

    private void ClickCommandExecute(object obj)
    {
        Button button = obj as Button;
        MessageBox.Show(button.ActualHeight.ToString() + " : " + button.ActualWidth);
    }
}


Только тсссссс! ViewModel ни слова!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы