什么是分层面板的巧妙设计?

时间:2010-10-26 02:07:04

标签: wpf mvvm

我想在一个唯一的窗口中设计一个简单的“会员列表/编辑”应用程序。

我的猜测是,实现这一目标的最佳和最简单的方法是在面板上设置“列表”部分(主要是数据网格视图和一些搜索内容),以及“编辑”(新成员或修改成员)另外,每个面板隐藏另一个面板取决于用户想要做什么。 从视觉上讲,这就是我必须要达到的目的。

我已经想到了很多方法来设计这个,但没有人听起来对我很好,主要是在实例化编辑面板的视图模型时,在列表面板的dgv中传递选定的成员或类似的东西。 我仍然认为自己是WPF的初学者,我确信最聪明的解决方案是我不会想到的。

迫不及待地想阅读专家的建议;)

1 个答案:

答案 0 :(得分:2)

你应该在DataTemplate方面考虑更多。

将您的两个不同视图分开,例如。 MemberListingView.XAML和MemberEditView.XAML。为每个视图创建视图模型。

要将它们放在一起,请遵循数据模板技术:

<DataTemplate DataType="{x:Type vm:MemberListingVM}">
    <AdornerDecorator>
        <views:MemberListingView />
    </AdornerDecorator>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:MemberEditVM}">
    <AdornerDecorator>
        <views:MemberEditView />
    </AdornerDecorator>
</DataTemplate>

// Now use a content presenter
<ContentPresenter Content="{Binding CurrentView}" />

您的上下文中应该有一个属性,用于指定您需要显示的当前视图。

private ViewModelBase _currentView;
public ViewModelBase CurrentView
{
    get { return _currentView; }
    set
    {
        _currentView = value;
        RaisePropertyChanged("CurrentView");
    }
}

// ...
public void OnSelectedMemberChanged(Member member)
{
    // Depending on your logic
    // If some condition...
    CurrentView = new MemberEditVM(member);
    // else
    CurrentView = MemberListingVM;
}