如何为不同的DataTemplates

时间:2015-06-23 06:51:44

标签: wpf vb.net mvvm

如何根据View当前显示的窗口设置MainWindow的位置?

我使用DataTemplates选择正确的View并将其作为内容实现到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位置。我可以将TopLeft绑定到主ViewModel中的属性,但问题出在View的ActualHeightActualWidth上。我无法从ViewModel获取它。

在WinForm中我使用SystemParameters.WorkArea.Width/Height和MVVM?

_Left = SystemParameters.WorkArea.Width - ActualWidth

非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

您可以在视图模型中绑定MainWindowWidthHeight属性。这是一个例子:

private double _WindowWidth = 500;

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

        //INotifyPropertyChanged stuff.
        OnPropertyChanged();
    }
}

View

Width="{Binding WindowWidth}"

使用WindowWidth属性,您可以拥有LeftTop的其他媒体资源。

private double _WindowLeft = 150;

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

        //INotifyPropertyChanged stuff.
        OnPropertyChanged();
    }
}

就像之前一样,你可以绑定到属性:

Left="{Binding WindowLeft}"

此方法的好处是您现在可以访问查看模型<中的Windows LeftTopWidthHeight属性/ strong>即可。因此,您可以执行逻辑,在构造函数中调整视图的大小/重定位,或者在视图模型中需要它。

考虑将这些属性放在基类中,因此所有View Model都可以从类继承而无需实现属性。