是否可以使用WinRT中的Type-Qualified(请参阅Single Property, Attached or Otherwise Type-Qualified
部分)语法绑定数据?
我想要的是有可能绑定到我的ViewModel的一个项目,这是一个接口:
public interface IViewModel {
INewsContainer ItemHost {get;}
}
public interface INewsContainer {
ObservableCollection<INews> News {get;}
}
class ViewModel: IViewModel, INewsContainer {
// ....
public INewsContainer ItemHost { get { return this; } }
// ...
ObservableCollection<INews> news;
ObservableCollection<INews> INewsContainer.News { get { return news; } }
}
通常,在WPF绑定中,如下所示正常工作(假设DataContext
是ViewModel
的实例):
<ListView Grid.Column="1"
ItemsSource="{Binding Path=ItemHost.(vm:INewsContainer.News)}" />
但是,如果我在WinRT中尝试这样做,则会因登录立即窗口而失败:
A first chance exception of type 'Windows.UI.Xaml.Markup.XamlParseException' occurred (...) Failed to assign to property 'Windows.UI.Xaml.Data.Binding.Path'. [Line: 35 Position: 17]
&#34;定期&#34;绑定,即Path=ItemHost.News
也不起作用。它声明在ViewModel类的实例中找不到News
属性。
解决方法
This解决方法工作正常,但我真的很讨厌在这里安装转换器:(
答案 0 :(得分:1)
如果要这样做,则需要显式和隐式地实现接口。
像这样:
public interface IViewModel
{
string Name { get; set; }
}
public class ViewModel : IViewModel
{
public ViewModel()
{
(this as IViewModel).Name = "Jerry";
}
public string Name
{
get { return (this as IViewModel).Name; }
set { (this as IViewModel).Name = value; }
}
string IViewModel.Name { get; set; }
}
然后你可以这样做
<Grid Background="Black">
<Grid.DataContext>
<local:ViewModel/>
</Grid.DataContext>
<TextBlock Text="{Binding Name}" />
</Grid>
阅读:http://msdn.microsoft.com/en-us/library/aa288461(v=vs.71).aspx
祝你好运。