如何解决C# WPF MVVM 从多个用户控件访问 MainView 属性更改进度条可见性
我对编程非常陌生(2 年),现在正在尝试按照 MVVM 模式构建我的第一个 WPF 应用程序。
我有一个“主应用程序”:
- 菜单
- 网格的中间部分显示所有用户控件
- 带有文本框和进度条的状态栏
我可以通过使用菜单中的按钮完美地切换中间网格中的内容,一切正常。
我不明白的是如何访问主应用程序视图内状态栏中的进度条。
我在这边和其他地方搜索了好几个小时。我唯一能找到的是将进度条 isVisible 属性绑定到 MainViewModel 中的方法。这很容易。
我用
绑定了ApplicationView中的进度条Visibility="{Binding ShowProgressBar}"
ApplicationViewModel:
private bool _showProgressBar;
public bool ShowProgressBar
{
get { return _showProgressBar; }
set
{
if (_showProgressBar != value)
{
_showProgressBar = value;
OnPropertyChanged("ShowProgressBar");
}
}
}
我现在可以毫无问题地更改进度条的可见性,只要我从 ApplicationViewModel 内部访问该属性即可。
如何从不同的 ViewModel 访问/更改此属性?我在 ApplicationView 中显示了 5 个不同的用户控件和单独的视图模型,每个控件都在做其他(繁重的)工作。
当用户开始在这些用户控件内部工作时,我希望进度条可见,然后消失(我正在使用 IsIndeterminate="True",因此不需要真正更新所需的状态)。
据我所知,我无法创建 ApplicationViewModel 的新实例或使用实例/单例。一旦我尝试了这些解决方案,我的导航按钮就不再起作用了。
我正在使用此实现进行导航:
<Window.Resources>
<DataTemplate DataType="{x:Type home:HomeViewModel}">
<home:HomeView />
</DataTemplate>
<DataTemplate DataType="{x:Type work:OutletViewModel}">
<work:OutletView />
</DataTemplate>
<DataTemplate DataType="{x:Type setting:SettingsViewModel}">
<setting:SettingsView />
</DataTemplate>
<DataTemplate DataType="{x:Type mail:MailViewModel}">
<mail:MailView />
</DataTemplate>
<DataTemplate DataType="{x:Type info:InfoViewModel}">
<info:InfoView />
</DataTemplate>
</Window.Resources>
<!-- App Content goes here,mapping Views -->
<Grid x:Name="appGrid" Grid.Row="1">
<ContentControl Content="{Binding CurrentPageViewModel}" />
</Grid>
我将不胜感激任何反馈/提示。
谢谢!
托马斯
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。