WinRt中的Type-Qualified绑定?

时间:2013-12-09 14:59:18

标签: winrt-xaml

是否可以使用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绑定中,如下所示正常工作(假设DataContextViewModel的实例):

    <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解决方法工作正常,但我真的很讨厌在这里安装转换器:(

1 个答案:

答案 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

祝你好运。