困惑的嵌入式程序员在这里
我正在制作一个WPF应用程序,它将有多个视图/页面。我希望视图是全屏,并能够通过按钮点击。
视图1:登陆欢迎页面,打开下一步按钮
视图2:选择Comport页面,用户选择Comport,然后单击
视图3: Comport应用程序主页面
我不想创建3个单独的视图模型,因为视图3需要从视图2中选择相应的视图。我发现切换视图的唯一方法是切换数据上下文。但是,我不能访问其他视图模型中的数据。
如果有人知道如何实现这一点,请让我知道!
发布于 2020-10-14 05:13:12
如果您不想要三个不同的视图模型,您可以向主视图模型添加一个属性来决定显示哪个视图:
public class MainViewModel : INotifyPropertyChanged
{
public string SharedSampleProperty { get; set; } = "Some value that is shared across all views...";
private View _currentView = View.First;
public View CurrentView
{
get => _currentView;
set { _currentView = value; NotifyPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public enum View
{
First,
Second,
Third
}在视图中,然后可以使用ContentControl和Style,它们根据此属性的值设置ContentTemplate:
<ContentControl Content="{Binding}">
<ContentControl.Resources>
<DataTemplate x:Key="{x:Static local:View.First}">
<TextBlock>1...</TextBlock>
</DataTemplate>
<DataTemplate x:Key="{x:Static local:View.Second}">
<TextBlock>2...</TextBlock>
</DataTemplate>
<DataTemplate x:Key="{x:Static local:View.Third}">
<TextBlock>3...</TextBlock>
</DataTemplate>
</ContentControl.Resources>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentView}" Value="First">
<Setter Property="ContentTemplate" Value="{StaticResource {x:Static local:View.First}}" />
</DataTrigger>
<DataTrigger Binding="{Binding CurrentView}" Value="Second">
<Setter Property="ContentTemplate" Value="{StaticResource {x:Static local:View.Second}}" />
</DataTrigger>
<DataTrigger Binding="{Binding CurrentView}" Value="Third">
<Setter Property="ContentTemplate" Value="{StaticResource {x:Static local:View.Third}}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>显然,您可以在DataTemplates中用UserControls替换TextBlock元素。
发布于 2020-10-13 23:21:25
我不想创建3个单独的视图模型,因为视图3需要从视图中选择相应的视图
使用单个VM的一种方法是创建一个页面,其中导航(如按钮单击操作)只需根据绑定的状态变量隐藏/显示特定的控件即可完成。这意味着屏幕上所有控件的Visiblity都绑定到该绑定状态值;根据找到的值,一些控件是可见的,一些控件是隐藏的。
如果你有一个不太大的应用程序,可以通过关闭旧的项目和打开新的项目来隐藏和显示用户看到的新页面视图。
如果应用程序将有大约25个以上的控件需要这样的编排,请避免这种设计。
https://stackoverflow.com/questions/64336780
复制相似问题