打不到 属性 的 getter

Cannot hit the getter of Property

我正在尝试在 Prism 中使用 AvalonDock。除 MenuItem "Tools->Properties" 外,一切正常。 MenuItem "File->New" 工作正常 - 创建了新的 window,我可以停靠在任何我想要的地方。

这段代码在简单的 MVVM 应用程序(没有 Prism)中工作正常——“MenuItem”总是被触发。

我有:

<UserControl x:Class="ModuleCAvalonDock.ViewC">
<Menu>
        <MenuItem Header="File">
            <MenuItem Header="New" Command="{Binding NewCommand}"/>
            <MenuItem Header="Open" Command="{Binding OpenCommand}"/>
            <Separator/>
            <MenuItem Header="Save" Command="{Binding ActiveDocument.SaveCommand}"/>
            <MenuItem Header="Save As..." Command="{Binding ActiveDocument.SaveAsCommand}"/>
            <Separator/>
            <MenuItem Header="Close" Command="{Binding ActiveDocument.CloseCommand}"/>
        </MenuItem>
        <MenuItem Header="Tools">
            <MenuItem Header="Properties" IsChecked="{Binding FileStats.IsVisible, Mode=TwoWay}" IsCheckable="True"/>
        </MenuItem>
        <MenuItem Header="Layout">
            <MenuItem Header="Load" Command="{Binding LoadLayoutCommand, ElementName=mainWindow}"/>
            <MenuItem Header="Save" Command="{Binding SaveLayoutCommand, ElementName=mainWindow}"/>
            <MenuItem Header="Dump to Console" Click="OnDumpToConsole"/>
        </MenuItem>
    </Menu>
</UserControl>

我如何绑定:

public ViewC(IViewModel viewModel)
{
   InitializeComponent();
   this.DataContext = Workspace.This;
}

和视图模型:

public class Workspace:ViewModelBase
{
   FileStatsViewModel _fileStats = null;
   public FileStatsViewModel FileStats
   {
      get
        {
          if (_fileStats == null)
             _fileStats = new FileStatsViewModel();
           return _fileStats;
        }
   }

   RelayCommand _newCommand = null;
    public ICommand NewCommand
    {
        get
        {
            if (_newCommand == null)
            {
                _newCommand = new RelayCommand((p) => OnNew(p), (p) => CanNew(p));
            }

            return _newCommand;
        }
    }

    private bool CanNew(object parameter)
    {
        return true;
    }

    private void OnNew(object parameter)
    {
        _files.Add(new FileViewModel());
        ActiveDocument = _files.Last();
    }


   protected Workspace()
    { 

    }

    static Workspace _this = new Workspace();

    public static Workspace This
    {
        get { return _this; }
    } 
}

FileStatsViewModel:

public class FileStatsViewModel : ToolViewModel {  }
public class ToolViewModel
{
    private bool _isVisible = true;
    public bool IsVisible
    {
        get { return _isVisible; }
        set
        {
            if (_isVisible != value)
            {
                _isVisible = value;
                RaisePropertyChanged("IsVisible");
            }
        }
     }
}

但是,它在 Prism 中不起作用。我已经尝试设置一些断点来检查 属性 是否被触发并且 FileStats 属性 在简单的 MVVM 应用程序中被触发,但是 FileStats 属性 没有在 Prism 应用程序中触发! 我初始化视图的代码:

public class ModuleCModule: ModuleBase
{
    public ModuleCModule(IUnityContainer container, IRegionManager regionManager)
            : base(container, regionManager) { }

    protected override void InitializeModule()
    {
        RegionManager.RegisterViewWithRegion(RegionNames.ContentRegion, typeof(ViewC));
    }

    protected override void RegisterTypes()
    {
        Container.RegisterTypeForNavigation<ViewC>();
    }
}

我可以触发我的命令真的很有趣<MenuItem Header="New" Command="{Binding NewCommand}"/>。但是,我无法在 viewModel Workspace.

处触发 属性 FileStats

如何触发我的 属性?我做错了什么?

Prism 对 WPF 绑定系统没有影响,因此这是您如何创建与视图的 DataContext 的绑定的问题。您如何将 ViewModel 分配给 View 的 DataContext?检查您的输出 window 是否存在绑定错误。可能是您的 DataContext 未设置。

如果您使用的是 ViewModelLocator,请确保您遵循正确的命名约定:

http://brianlagunas.com/getting-started-prisms-new-viewmodellocator/

编辑: 我 运行 你的应用程序是这样的,并且能够在你的 FileStats.IsVisible [=25= 上点击 setter ].如果您在 FileStats 的 getter 上放置一个断点,那么当您单击菜单项时它不会触发,因为您绑定到 FileStats 的 属性,而不是读取的 FileStats -无论如何。顺便说一下,您知道 Prism 6.1 已经发布(您使用的是 v4)。另外,您应该尝试使用 NuGet 而不是硬引用。