Mvvm 使用Caliburn在Windows应用商店中绑定组合框

Mvvm 使用Caliburn在Windows应用商店中绑定组合框,mvvm,windows-8,windows-store-apps,winrt-xaml,caliburn.micro,Mvvm,Windows 8,Windows Store Apps,Winrt Xaml,Caliburn.micro,我正在尝试使用Caliburn和以下代码绑定组合框: yyyView.xaml yyyyviewmodel.xaml private string selectedFilter; 公共BindableCollection筛选器 { 得到 { 返回新的BindableCollection( 新字符串[]{“全部”、“上个月”、“上周”、“昨天”}); } } 公共字符串选择过滤器 { 获取{return selectedFilter;} 设置 { selectedFilter=值; Notif

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

yyyView.xaml


yyyyviewmodel.xaml

private string selectedFilter;
公共BindableCollection筛选器
{
得到
{
返回新的BindableCollection(
新字符串[]{“全部”、“上个月”、“上周”、“昨天”});
}
}
公共字符串选择过滤器
{
获取{return selectedFilter;}
设置
{
selectedFilter=值;
NotifyOfPropertyChange(()=>SelectedFilter);
}
}
使用这段代码,我在App.xaml.csGetInstance方法上得到了一个ArgumentNullException

我不熟悉MVVM、Caliburn和XAML,但我在某个地方读到过WinRT开发中出现了一些行为(混合行为,我相信)

这就是问题所在吗?我怎样才能解决这个问题

多谢各位

编辑:

App.xaml.cs

受保护的覆盖无效配置()
{
LogManager.GetLog=type=>newdebuglogger(type);
容器=新的WinRTContainer();
container.RegisterWinRTServices();
container.PerRequest();
container.PerRequest();
container.PerRequest();
container.PerRequest();
}
App.xaml


您可能尚未在
应用程序
实现中的
配置
方法重载中注册视图模型。请查看中
应用程序
代码中的
//TODO
部分

这显然是有意的行为,但引起了一些混乱,如CodePlex上的讨论论坛和问题跟踪器中所示,请参阅和

基本上,只需将这一行添加到
Configure
方法中,您就可以过得很好:

container.PerRequest<yyyViewModel>();
container.PerRequest();

您可能尚未在
应用程序
实现中的
配置
方法重载中注册视图模型。请查看中
应用程序
代码中的
//TODO
部分

这显然是有意的行为,但引起了一些混乱,如CodePlex上的讨论论坛和问题跟踪器中所示,请参阅和

基本上,只需将这一行添加到
Configure
方法中,您就可以过得很好:

container.PerRequest<yyyViewModel>();
container.PerRequest();

你能发布你的App.xaml和任何相关代码吗?听起来好像有什么东西没有被正确构造,尽管有你的Caliburn绑定。我没有为此视图更改App.xaml,该应用的其他视图正在工作。在代码隐藏中,我注册了ViewModel:
container.PerRequest()我可以进入视图并查看其他绑定元素,只是组合框工作不正常。它是空的,当我单击它时会引发异常。你能发布你的App.xaml和任何相关代码吗?听起来好像有什么东西没有被正确构造,尽管有你的Caliburn绑定。我没有为此视图更改App.xaml,该应用的其他视图正在工作。在代码隐藏中,我注册了ViewModel:
container.PerRequest()我可以进入视图并查看其他绑定元素,只是组合框工作不正常。它是空的,当我单击它时会引发异常。谢谢你的回答,但我已经在应用程序上注册了ViewModel。我甚至在同一个视图上还有其他正在工作的绑定元素。问题一定是别的。抱歉,如果我没有说清楚:问题发生在我单击组合框时。而且它也开始了empty@Silva我已经按照您指定的方式实现了您的代码,但我无法重现您的错误。我看到的唯一一件事是,
组合框
项无法正确显示在框外,因此我在
组合框
中添加了一个
项模板
。老实说,我认为这对您的情况没有帮助,所以请发布App.xaml.cs的相关部分(例如
Configure
OnLaunched
方法),以便于错误跟踪。@Gustafsson,我已经更新了最初的帖子。附言:我已经成功地使用显式绑定实现了这一点,即:
,但是,我相信Caliburn应该为我做到这一点…@Silva感谢代码。是的,CM应该通过约定管理这些绑定,我的代码(与您的代码相同)可以按预期工作。您使用的是哪种CM版本?您还可以发布您的
OnLaunched
方法吗?谢谢您的回答,但我已经在应用程序上注册了ViewModel。我甚至在同一个视图上还有其他正在工作的绑定元素。问题一定是别的。抱歉,如果我没有说清楚:问题发生在我单击组合框时。而且它也开始了empty@Silva我已经按照您指定的方式实现了您的代码,但我无法重现您的错误。我看到的唯一一件事是,
组合框
项无法正确显示在框外,因此我在
组合框
中添加了一个
项模板
。老实说,我认为这对您的情况没有帮助,所以请发布App.xaml.cs的相关部分(例如
Configure
OnLaunched
方法),以便于错误跟踪。@Gustafsson,我已经更新了最初的帖子。附言:我已经成功地使用显式绑定实现了这一点,即:
,但是,我相信Caliburn应该为我做到这一点…@Silva感谢代码。是的,CM应该通过约定管理这些绑定,我的代码(与您的代码相同)可以按预期工作。您使用的是哪种CM版本?您是否也可以将您的
OnLaunched
m发布
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>();
}
<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>
container.PerRequest<yyyViewModel>();