使用Caliburn在Windows应用商店中进行Combobox绑定

时间:2013-03-18 17:46:38

标签: mvvm windows-8 windows-store-apps winrt-xaml caliburn.micro

我正在尝试使用Caliburn和以下代码绑定组合框:

yyyView.xaml

 <ComboBox x:Name="Filters"></ComboBox>

yyyViewModel.xaml

private string selectedFilter;

public BindableCollection<string> Filters
{
    get
    {
        return new BindableCollection<string>(
                 new string[]{ "All", "Last Month", "Last Week", "Yesterday" });
    }
}

public string SelectedFilter
{
    get { return selectedFilter; }
    set
    {
        selectedFilter = value;
        NotifyOfPropertyChange(() => SelectedFilter);
    }
}

使用此代码,我在 App.xaml.cs 上的 ArgumentNullException < strong> GetInstance 方法。

我是MVVM,Caliburn和XAML的新手,但我在某处看到某些行为(我相信,混合行为)在WinRT开发中被删除了。

这是问题吗?我该如何解决这个问题?

谢谢

编辑:

App.xaml.cs

protected override void Configure()
{
    LogManager.GetLog = type => new DebugLogger(type);
    container = new WinRTContainer();
    container.RegisterWinRTServices();
    container.PerRequest<aaaViewModel>();
    container.PerRequest<xxxViewModel>();
    container.PerRequest<yyyViewModel>();
    container.PerRequest<zzzViewModel>();
}

的App.xaml

<caliburn:CaliburnApplication
    x:Class="yyyStoreApp.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:yyyApp"
    xmlns:caliburn="using:Caliburn.Micro"
    xmlns:converters="using:yyyApp.Converters"
    RequestedTheme="Light">

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/CustomStyles.xaml" />
                <ResourceDictionary Source="Resources/StandardStyles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            <converters:ImageFilePathConverter x:Key="ImageFilePath"/>
        </ResourceDictionary>
    </Application.Resources>
</caliburn:CaliburnApplication>

1 个答案:

答案 0 :(得分:1)

您可能未在Configure实施中的App方法重载中注册视图模型。请查看WinRT documentation// TODO代码中的App部分。

这显然是预期的行为,但已引起一些混淆,如在CodePlex上的讨论论坛和问题跟踪器中可以看到的,请参阅hereherehere

基本上,只需将此行添加到Configure方法:

即可
container.PerRequest<yyyViewModel>();