2015-06-23 4 views
1

Как установить позицию для MainWindow в зависимости от представления этого окна в настоящее время?Как установить положение окна для разных DataTemplates

Я использую DataTemplates, чтобы выбрать правильный Просмотр и реализовать его как Content to MainWIndow.

, например.

<ContentControl> 
      <ContentControl.Style> 
       <Style TargetType="{x:Type ContentControl}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding LoginViewM.Content}" Value=""> 
          <Setter Property="Content"> 
           <Setter.Value> 
            <SP:SplashViewModel/> 
           </Setter.Value> 
          </Setter> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding LoginViewM.Content}" Value="Admin"> 
          <Setter Property="Content"> 
           <Setter.Value> 
            <EE:EmployeeViewModel/> 
           </Setter.Value> 
          </Setter> 
         </DataTrigger> 

В зависимости от того, какой вид реализован, я бы хотел установить позицию MainWindow. Я мог бы привязать Top и Left к собственности в main ViewModel, но проблема в том, что ActualHeight и ActualWidth вид. Я не могу получить его из ViewModel.

В WinForm я использовал SystemParameters.WorkArea.Width/Height и в MVVM?

_Left = SystemParameters.WorkArea.Width - ActualWidth 

Большое спасибо за любое предложение.

ответ

1

Вы можете привязать MainWindow к Width и Height свойствам в вашей модели. Вот пример:

private double _WindowWidth = 500; 

public double WindowWidth 
{ 
    get { return _WindowWidth; } 
    set 
    { 
     _WindowWidth = value; 

     //INotifyPropertyChanged stuff. 
     OnPropertyChanged(); 
    } 
} 

И на вашем View:

Width="{Binding WindowWidth}" 

Используя WindowWidth свойство, вы можете иметь другое свойство для Left и Top.

private double _WindowLeft = 150; 

public double WindowLeft 
{ 
    get { return _WindowLeft ; } 
    set 
    { 
     _WindowLeft = value; 

     //INotifyPropertyChanged stuff. 
     OnPropertyChanged(); 
    } 
} 

Так же, как и прежде, вы можете привязать к свойству:

Left="{Binding WindowLeft}" 

Преимущество этого метода заключается в том, что теперь у вас есть доступ к Windows, Left, Top, Width и Height свойства в вашем Просмотреть модель. Таким образом, вы можете выполнить свою логику, которая изменит размер/переместит ваш View в ваш конструктор или там, где это необходимо в Model View.

Рассмотрите возможность размещения этих свойств в базовом классе , поэтому все ваши модели просмотра могут наследовать от класса без необходимости реализации свойств.

Смежные вопросы