C# 当ObservableCollection从视图模型中公开时,如何对ObservableCollection中公开的属性进行数据绑定?

C# 当ObservableCollection从视图模型中公开时,如何对ObservableCollection中公开的属性进行数据绑定?,c#,xaml,mvvm,observablecollection,C#,Xaml,Mvvm,Observablecollection,当从视图模型公开所述ObservableCollection时,我无法找到ObservableCollection中包含的项的数据绑定属性的正确绑定语法 当我直接绑定模型的可观察集合时,它就工作了。当我将数据绑定到视图模型公开的模型的可观察集合时,它不会。这是一个XAML/C Windows应用商店8.1应用程序 我目前从骨骼测试中得到的信息 我想要什么 这是我的骨骼测试 我有一个项目类 项目存储在observable集合中,我最终希望根据ID和字母属性进行绑定: public class It

当从视图模型公开所述ObservableCollection时,我无法找到ObservableCollection中包含的项的数据绑定属性的正确绑定语法

当我直接绑定模型的可观察集合时,它就工作了。当我将数据绑定到视图模型公开的模型的可观察集合时,它不会。这是一个XAML/C Windows应用商店8.1应用程序

我目前从骨骼测试中得到的信息

我想要什么

这是我的骨骼测试 我有一个项目类

项目存储在observable集合中,我最终希望根据ID和字母属性进行绑定:

public class Item
{
    public Item(int id, char letter)
    {
        ID = id;
        Letter = letter;
    }

    public int ID
    {
        get;
        set;
    }

    public char Letter
    {
        get;
        set;
    }
}
模型类包含一个可观察的项集合

public class Model
{
    public Model()
    {
    }

    public ObservableCollection<Item> Items
    {
        get
        {
            return _theItems;
        }
        set
        {
            _theItems = value;
        }
    }

    ObservableCollection<Item> _theItems = new ObservableCollection<Item>();
}
我的主页XAML看起来像这样

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
     <GridView ItemsSource="{Binding Path=theItems}" >
        <GridView.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock>{binding Path=ID}</TextBlock>
                    <TextBlock>{binding Path=Letter}</TextBlock>
                </StackPanel>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>
</Grid>
此测试框架旨在简化但模拟我的实际目标,即拥有一个视图模型,该模型公开了多个内容,其中一个是我想要绑定其不同属性的对象的可观察集合。但是,绑定可观察集合中暴露的项的属性让我难以理解

我假设我的问题与XAML绑定语法有关。我认为,因为我将页面的DataContext设置为ViewModel,所以将GridView的ItemsSource设置为ItItems将允许我引用集合中项目的ID和字母属性

当我直接将模型的ObservableCollection绑定到主页的DataContext时,一切都很好。但这与我的ViewModel目标不同,ViewModel的目标是公开除ObservableCollection之外的其他内容,我想从单个视图模型绑定到ObservableCollection

我在StackOverflow上尝试了各种博客帖子和这里提到的东西,但都没有用。感谢您的帮助。

请检查您的XAML绑定

...
<TextBlock Text="{Binding ID, Mode=OneTime}"/>
<TextBlock Text="{Binding Letter, Mode=OneTime}"/>
...

就这样!非常感谢。最后的问题是提供Text=part。非常感谢。
public class ViewModel
{
    public ViewModel(Model model)
    {
        _model = model;
    }

    public ObservableCollection<Item> theItems
    {
        get
        {
            return _model.Items;
        }
    }

    private Model _model;
}
public MainPage()
{
    this.InitializeComponent();

    Model model = new Model();

    // some test data
    model.Items.Add(new Item(1, 'a'));

    _viewModel = new ViewModel(model);
    this.DataContext = _viewModel;
}
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
     <GridView ItemsSource="{Binding Path=theItems}" >
        <GridView.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock>{binding Path=ID}</TextBlock>
                    <TextBlock>{binding Path=Letter}</TextBlock>
                </StackPanel>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>
</Grid>
...
<TextBlock Text="{Binding ID, Mode=OneTime}"/>
<TextBlock Text="{Binding Letter, Mode=OneTime}"/>
...
...
<DataTemplate>
    <TextBlock>
        <TextBlock.Inlines>
            <Run Text="{Binding ID,Mode=OneTime}"/>
            <Run Text=" - "/>
            <Run Text="{Binding Letter,Mode=OneTime}"/>
        </TextBlock.Inlines>
    </TextBlock>
</DataTemplate>
...