在具有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
}
}
我如何修复它,使我在加载程序上或加载程序外看到的所有内容始终在该变量上?
您使用棱镜,因此可以使用IEventAggregator。
为事件创建数据模型
public class ChangeLoaderEventDataModel
{
}
创建事件
public class ChangeLoaderEvent: PubSubEvent<ChangeLoaderEventDataModel>
{
}
控制中的下一个订阅事件,该事件包含加载器
_eventAggregator.GetEvent<ChangeLoaderEvent>().Subscribe(ShowLoaderMethod);
之后,您可以在需要的时间和地点触发事件
_eventAggregator.GetEvent<ChangeLoaderEvent>().Publish(new ChangeLoaderEventDataModel());