Обычный на самом деле называется ненормальным
на несколькими экземплярами , поскольку существует некорректность браузера.
Объявление высоты строки: нормальные не только меняются от браузера к браузеру, который я ожидал - на самом деле, количественно эти различия были целыми, но они также варьировались от одного шрифта до другого, а также могут варьироваться в пределах определенного лица.
Слишком долго для комментария.
Основываясь на том, что @Kent изложил в вашем комментарии, весь смысл MVVM заключается в том, чтобы отключить модель представления из связанных с просмотром материалов (элементов управления), которая блокирует тестирование возможности графических приложений. Таким образом, у вас есть элемент UserControl / Button / whatever, связанный с графическим представлением, полностью исключает весь принцип MVVM.
Вы должны использовать MVVM в соответствии со своими стандартами, а затем повторно обратиться к своей проблеме.
.. и еще немало. Это довольно специфично в экстентах модели представления, не имеющих связанных с просмотром материалов, например, даже не имеющих свойств в виде-модели, подобных Visibility
. Обычно вы держите bool
, а затем в представлении используйте конвертер, чтобы переключить его на объект Visibility
.
Чтение немного больше в MVVM, безусловно, поможет вам,
Теперь для решения вашей текущей проблемы:
После структуры MVVM,
у вас будут ViewModels, такие как
MyViewModel
Instance1ViewModel
, Instance2ViewModel
, Instance3ViewModel
в MyViewModel
(Либо создайте его самостоятельно, либо если вы используете контейнер IOC, пусть он его введет) MyViewModel
свойство, подобное вашему опубликованному примеру: Пример:
// ViewModelBase is the base class for all instance View Models
private ViewModelBase _currentFrame;
public ViewModelBase CurrentFrame {
get {
return _currentFrame;
}
private set {
if (value == _currentFrame)
return;
_currentFrame = value;
OnPropertyChanged(() => CurrentFrame);
}
}
MyView.xaml
View вы должны (не должен быть верхнего уровня) установить верхний уровень DataContext на ваш MyViewModel
Пример:
...
<Window.Resources>
<DataTemplate DataType="{x:Type local:Instance1ViewModel}">
<local:Instance1View />
</DataTemplate>
<DataTemplate DataType="{x:Type local:Instance2ViewModel}">
<local:Instance2View />
</DataTemplate>
<DataTemplate DataType="{x:Type local:Instance3ViewModel}">
<local:Instance3View />
</DataTemplate>
</Window.Resources>
<Grid>
<ContentControl Content="{Binding Path=CurrentFrame}" />
</Grid>
...
CurrentFrame
в своей модели представления и указываете на любую из трех моделей экземпляров экземпляра, и представление будет соответствующим образом обновлено. Это дает вам MVVM совместимое приложение, для вашей другой проблемы, связанной с необходимостью не создавать воссоздание представлений динамически на основе DataTemplate, вы могли бы следовать предложенным подходам здесь и расширять его для вашего собственного использования.