所以目前为了更改我的MainWindow中的视图,我使用MVVM Light Messanger向我的MainWindow.xaml.cs发送消息,该消息执行以下操作:
public MainWindow()
{
InitializeComponent();
Messenger.Default.Register<NavigateMessage>(this, (action) => ShowUserControl(action));
this.DataContext = new MainWindowViewModel();
}
private void ShowUserControl(NavigateMessage nm)
{
Holder.Content = nm.View;
}
这是将NavigateMessage发送到此Receiver端的代码:
var msg = new NavigateMessage { View = View, ViewModelType = ViewModelType, ViewType = ViewType };
Messenger.Default.Send<NavigateMessage>(msg);
但是,我正在调整其他一些代码来处理这个问题,但是我需要通过绑定到NavigateMessage对象的实例来设置Holder
对象的内容,该对象将被定义和更新在App.xaml中
我该怎么做呢?我是否需要一个额外的类,我将在XAML中创建一个实例,该类将包含get,set属性,以便绑定到此实例的任何内容都会更新?
这就是我目前所拥有的:
namespace PhotoManagement
{
public class ViewChange : Common.NotifyUIBase
{
private NavigateMessage _v;
public NavigateMessage V
{
get { return _v; }
set
{
if (_v != value)
{
_v = value;
RaisePropertyChanged();
}
}
}
}
}
但是出现以下错误:
可访问性不一致:属性类型&#39; NavigateMessage&#39;少了 比财产更容易获得
NavigateMessage.cs
namespace PhotoManagement
{
class NavigateMessage
{
public Type ViewType { get; set; }
public Type ViewModelType { get; set; }
public UserControl View { get; set; }
}
}
修改 的 ----------------------------------------------- -------------------------
当我尝试运行它时,我的应用程序出现异常,我感觉这是由于我将内容添加到我的控件的方式:
<Controls:AnimatedContentControl Content="{StaticResource CurrentView}" Grid.Row="1" Grid.Column="1" />
这是StaticResource
<local:ViewChange x:Key="CurrentView" />
当然,下面是StaticResource实例关闭的类
namespace PhotoManagement
{
public class ViewChange : Common.NotifyUIBase
{
private NavigateMessage _v;
public NavigateMessage V
{
get { return _v; }
set
{
if (_v != value)
{
_v = value;
RaisePropertyChanged();
}
}
}
}
}
然后更新此实例:
var msg = new NavigateMessage { View = View, ViewModelType = ViewModelType, ViewType = ViewType };
//Replace XAML Instance with new View
((ViewChange)Application.Current.Resources["CurrentView"]).V = msg;
我认为我的ViewChange
课程创建错误,因为内容调用不知道在V
属性中查看,我该如何解决这个问题?我试过了
{StaticResource CurrentView.V}
然而,这只会导致另一个错误。
答案 0 :(得分:1)
您忘记了public
课程中的NavigateMessage
访问修饰符。默认情况下,类为internal
,因此比public
更难访问。
这应该可以解决问题
public class NavigateMessage
{
public Type ViewType { get; set; }
public Type ViewModelType { get; set; }
public UserControl View { get; set; }
}
您必须阅读错误消息,它已经告诉您:)