让我的Viewmodel出现在命名空间下拉列表中

时间:2014-11-24 22:15:47

标签: c# wpf mvvm

我试图将ViewModel公开为页面上的静态资源,以便绑定可以轻松访问它。

TestViewModel.cs

namespace Test.WPFUI.Home
{ 
    public class TestViewModel....

HelloWorldView.Xaml

xmlns:local="clr-namespace:Test.WPFUI.Home"

<UserControl.Resources>
    <local:TestViewModel x:Key="mainPageViewModel" />
</UserControl.Resources>

无法找到TestViewModel。我可以请一些提示或建议。

http://www.telerik.com/help/silverlight/gridview-troubleshooting-blank-cells.html

获取帮助
public class LoanViewModel : ScreenViewModelBase<LoanViewModel>, IRecord, INotifyPropertyChanged 
{

    public LoanViewModel(IEventAggregator events) .............

1 个答案:

答案 0 :(得分:1)

听起来你的初始问题没有完整的xmlns定义。您通常需要命名空间和程序集。

根据我的经验,最简单的方法就是让intellisense为你做到这一点。只需开始输入您想要的命名空间,只要在引用的项目中,就会有一个自动完成选项。

您的第二个问题是由于没有默认构造函数。你写了这个:

<local:TestViewModel x:Key="mainPageViewModel" />

将调用默认构造函数。但是,你在这里定义一个构造函数:

public LoanViewModel(IEventAggregator events) .............

删除提供的(无参数)默认构造函数。我将采取疯狂的猜测,并说XAML创建正确的IEventAggregator并不简单或不需要,所以我看到两个选择:

  1. 你没有真的在构造函数中需要该参数。只需在视图模型中添加一个默认构造函数,就可以了!

  2. 确实需要该参数,因此从XAML实例化不是一个好主意。从视图构造函数的其他位置传入视图模型。

  3. 如果您认为可以从XAML实例化正确的对象,请使用此帖子调用参数化的构造函数:Calling a parameterized constructor from XAML

    在我看来,将真正的常规类放入XAML并不是一个好的模式,所以我不愿意。按照惯例,我的意思是根本不相关。