我想在一个唯一的窗口中设计一个简单的“会员列表/编辑”应用程序。
我的猜测是,实现这一目标的最佳和最简单的方法是在面板上设置“列表”部分(主要是数据网格视图和一些搜索内容),以及“编辑”(新成员或修改成员)另外,每个面板隐藏另一个面板取决于用户想要做什么。 从视觉上讲,这就是我必须要达到的目的。
我已经想到了很多方法来设计这个,但没有人听起来对我很好,主要是在实例化编辑面板的视图模型时,在列表面板的dgv中传递选定的成员或类似的东西。 我仍然认为自己是WPF的初学者,我确信最聪明的解决方案是我不会想到的。
迫不及待地想阅读专家的建议;)
答案 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;
}