在具有MVVM模式的WPF中的不同视图中设置变量

本文关键字:视图 变量 设置 WPF MVVM 模式 | 更新日期: 2023-09-27 18:24:16

当用户在不同的视图之间移动时,我想在屏幕上始终可见的视图中打开一个加载程序。页脚我添加了加载程序,我会通过实例化的模型中的变量出现和消失来完成。但它不起作用。在调试模型secttrue/false值正确的模型,但不考虑页脚。有什么帮助吗?还是按事件?有可能吗?

页脚XAML

<StackPanel  DataContext="{StaticResource vmp}" Orientation="Horizontal" DockPanel.Dock="Bottom" Height="40" Background="#eeeeee">
            <ContentControl prism:RegionManager.RegionName="FooterRegion" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
            <TextBlock Text="eStart Enterprise 2.13.15" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="12" Margin="25,0,0,0"></TextBlock>
            <!-- my loader is progressbar here, default is false -->
            <ProgressBar Width="200" Margin="885, 0, 0, 0" Visibility="{Binding Path=model.Loader, Mode=TwoWay, Converter={StaticResource booleanToVisibilityConverter}}" HorizontalAlignment="Right" VerticalAlignment="Center" IsIndeterminate="True" Value="100" />
        </StackPanel>

myViewModel.cs(我会将视图模型调用到另一个xaml变量,以设置真正的progressbar):

class ReadAndPrintFromDevice : ICommand
             {
                 public event EventHandler CanExecuteChanged;
                 public bool CanExecute(object parameter)
                 {
                     return true;
                 }
                 public async void Execute(object parameter)
                 {
                     //this don't work
                     modelViewModel.getInstance().Loader = true;
                     //other code
                 }
}

我如何修复它,使我在加载程序上或加载程序外看到的所有内容始终在该变量上?

在具有MVVM模式的WPF中的不同视图中设置变量

您使用棱镜,因此可以使用IEventAggregator。

为事件创建数据模型

public class ChangeLoaderEventDataModel
{
}

创建事件

public class ChangeLoaderEvent: PubSubEvent<ChangeLoaderEventDataModel>
{
}

控制中的下一个订阅事件,该事件包含加载器

_eventAggregator.GetEvent<ChangeLoaderEvent>().Subscribe(ShowLoaderMethod);

之后,您可以在需要的时间和地点触发事件

 _eventAggregator.GetEvent<ChangeLoaderEvent>().Publish(new ChangeLoaderEventDataModel());