Mvvm 使用Caliburn在Windows应用商店中绑定组合框
我正在尝试使用Caliburn和以下代码绑定组合框: yyyView.xamlMvvm 使用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
yyyyviewmodel.xaml
private string selectedFilter;
公共BindableCollection筛选器
{
得到
{
返回新的BindableCollection(
新字符串[]{“全部”、“上个月”、“上周”、“昨天”});
}
}
公共字符串选择过滤器
{
获取{return selectedFilter;}
设置
{
selectedFilter=值;
NotifyOfPropertyChange(()=>SelectedFilter);
}
}
使用这段代码,我在App.xaml.cs的GetInstance方法上得到了一个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>();