在caliburn.micro中启用管理模式视图
本文关键字:管理模式 视图 启用 caliburn micro | 更新日期: 2023-09-27 18:08:09
我正在重写一个WPF应用程序来使用Caliburn.Micro。这款应用是一个菜单系统,可以显示文件夹,然后显示文件夹中的文件。问题是,我需要允许用户切换到"管理"模式,这将允许额外的选项。我目前有一个FolderView和FileView以及每个ViewModels。我想有一个单独的FolderAdminView和FileAdminView,这样我就可以改变UI并启用额外的选项。当用户改变模式时,问题是在两者之间切换。
FolderViewModel和FileViewModel可以同时加载,因此调用DeactivateItem(ActiveItem, true);
将充当返回按钮并返回到文件夹视图。
我也想从FolderViewModel延续到FolderAdminViewModel的值,因为主要的区别是UI。
是否有一个简单的方法来交换项目在WindowManager或更简单的方法来做这件事?我可以有一个ViewModel,但两个视图?是否有一种方法,有两个模板在一个视图,并选择正确的一个吗?
你能不能在你的ViewModel上有一个IsAdmin属性,并使用BooleanToVisibilityConverter
绑定你的admin项目的可见性?
视图模型
public bool IsAdmin
{
get
{
//What ever you do to work out if user is admin
//omitted any INotifyPropertyChanged gubbins
}
}
Xaml
<StackPanel Visibility="{Binding IsAdmin,Converter={StaticResource BooleanToVisibiltyConverter}}"></StackPanel>
转换器
public sealed class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var flag = false;
if (value is bool)
{
flag = (bool)value;
}
else if (value is bool?)
{
var nullable = (bool?)value;
flag = nullable.GetValueOrDefault();
}
if (parameter != null)
{
if (bool.Parse((string)parameter))
{
flag = !flag;
}
}
return flag ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var back = ((value is Visibility) && (((Visibility)value) == Visibility.Visible));
if (parameter != null)
{
if ((bool)parameter)
{
back = !back;
}
}
return back;
}
}
你可以使用'context'附加属性来指定所加载视图的上下文,例如:
<ContentControl x:Name="SomeSubViewModel" cal:View.Context="SomeContext" />
CM在上下文对象上使用ToString()
来获得一个值,它将在视图解析期间用于构建typename。这意味着您可以为同一个视图模型拥有多个视图,因此当用户处于管理模式时,可以通过绑定View.Context
属性
你也可以为你想隐藏在视图模型上的每个项目创建绑定,并使用转换器来检查用户是否登录等——显然,这取决于你是想在两个视图中复制XAML,还是想在一个视图中使用条件逻辑来隐藏/显示区域
阅读上下文属性:
http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions& referringTitle =文档
上面的链接有一些例子(在前几节)
:
http://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition 相同ViewModel部分的多个视图