gpt4 book ai didi

c# - 当 ObservableCollection 从 View 模型公开时,如何对从 ObservableCollection 公开的属性进行数据绑定(bind)?

转载 作者:行者123 更新时间:2023-12-03 10:45:13 27 4
gpt4 key购买 nike

当所述 ObservableCollection 从 View 模型公开时,我无法找到正确的绑定(bind)语法来绑定(bind) ObservableCollection 中包含的项目的属性。

当我直接绑定(bind)模型的可观察集合时,它可以工作。当我将模型的可观察集合数据绑定(bind)为 View 模型公开的数据时,它不会。这是一个 XAML/C# Windows Store 8.1 应用程序。

我目前从骨架测试中得到了什么

{binding Path=ID}
{binding Path=Letter}

我想要的
1
a

这是我的骨架测试

我有一个项目类

项目存储在可观察集合中,我最终希望绑定(bind) ID 和 Letter 属性:
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>();
}

我有一个 查看型号 暴露模型的可观察集合
public class ViewModel
{
public ViewModel(Model model)
{
_model = model;
}

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

private Model _model;
}

我的 主页 构造函数使用一些测试数据创建模型,创建 ViewModel,并将页面的 DataContext 设置为 View 模型:
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;
}

我的 主页 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>

这个测试框架旨在简化但模仿我的真正目标,即拥有一个公开多个事物的 View 模型,其中之一是我想要绑定(bind)其不同属性的对象的可观察集合。但是绑定(bind)可观察集合中暴露的项目的属性让我望而却步。

我假设我的问题与 XAML 绑定(bind)语法有关。我在想,因为我将页面的 DataContext 设置为 ViewModel,所以将 GridView 的 ItemsSource 设置为 theItems 将允许我引用集合内项目的 ID 和 Letter 属性。

当我直接将模型的 ObservableCollection 绑定(bind)到 MainPage 的 DataContext 时,一切都很好。但这背离了我的 ViewModel 目标,即公开除 ObservableCollection 之外的其他内容,我想从单个 View 模型绑定(bind)到这些内容。

我在 StackOverflow 上尝试了各种博客文章和此处提到的内容,但均无济于事。帮助表示赞赏。

最佳答案

请检查您的 XAML 绑定(bind)。

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

考虑更改 DataTemplate .
...
<DataTemplate>
<TextBlock>
<TextBlock.Inlines>
<Run Text="{Binding ID,Mode=OneTime}"/>
<Run Text=" - "/>
<Run Text="{Binding Letter,Mode=OneTime}"/>
</TextBlock.Inlines>
</TextBlock>
</DataTemplate>
...

关于c# - 当 ObservableCollection 从 View 模型公开时,如何对从 ObservableCollection 公开的属性进行数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28790736/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com