silverlight 中数据绑定到列表

发布于 12-11 19:14 字数 699 浏览 0 评论 0 原文

我有一个包含 TextBlock 的网格。 Grid 的 DataContext 类型为 List,我想将 TextBlock.Text 属性绑定到列表中第一个元素的 MyClass.MyProperty 属性。我尝试过类似的方法:

<Grid x:Name="RootLayout">
    <TextBlock Text="{Binding [0].MyProperty}" />
</Grid>

但是当然,那不起作用。这样做的正确方法是什么?

编辑:

我将尝试让我的解释更清楚。我在网格中有多个元素,每个元素都绑定到列表中的不同项目。这些项目以自定义方式布局,这是 GridView 或 ListBox 无法完成的。网格中的一个项目是 TextBlock,我想将其 Text 属性绑定到列表中第一个元素的属性。一旦我知道如何做到这一点,我就可以扩展该知识以将绑定添加到网格中的其余元素。

编辑 2:

事实证明,我的代码在 Silverlight 中运行得很好。我的项目实际上是一个 WinRT 项目,但我认为如果将其标记为 Silverlight,我会得到更快的答案,因为数据绑定应该以相同的方式工作。我假设这是 WinRT 中的一个错误,所以我只需要找到一个解决方法:(

I've got a Grid which contains a TextBlock. The Grid's DataContext is of type List<MyClass>, and I'd like to bind the TextBlock.Text property to the MyClass.MyProperty property of first element in the List. I tried something like:

<Grid x:Name="RootLayout">
    <TextBlock Text="{Binding [0].MyProperty}" />
</Grid>

But of course, that did not work. What's the right way of doing this?

Edit:

I'm going to try and make my explanation more clear. I've got multiple elements in the grid, each of which binds to a different item in the list. The items are laid out in a customized manner which cannot be accomplished by a GridView or ListBox. One of the items in the Grid is the TextBlock, and I'd like to bind its Text property to a property of the first element in the list. Once I know how to do that, I can extend that knowledge to add bindings to the rest of the elements in the grid.

Edit 2:

Turns out, my code works just fine in Silverlight. My project is actually a WinRT project, but I figured I'd get quicker answers if I tagged it as Silverlight, since databinding is supposed to work the same. I'm assuming this is a bug in WinRT, so I'll just have to find a workaround for it :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

满天都是小星星 2024-12-18 19:14:50

我不确定我明白你为什么要这样做,但你可以创建一个属性,从列表中的项目返回你想要的内容,如下所示:

public string MyBindingProperty
{
    get { return MyList != null && MyList.Count > 0 ? MyList[0].MyProperty : "Error Text"; }
}

然后你将绑定到 MyBindingProperty

<TextBlock Text="{Binding MyBindingProperty}" />

编辑

我说你无法获得列表中的项目是错误的 - 我的错。你的装订应该是这样的:

<TextBlock Text="{Binding [0].MyProperty}" />

如果你需要我,我会在角落里享受我简陋的馅饼。

I'm not sure I get why you want to do this, but you could create a property that returns what you want from the item in the list like so:

public string MyBindingProperty
{
    get { return MyList != null && MyList.Count > 0 ? MyList[0].MyProperty : "Error Text"; }
}

Then you'd bind to MyBindingProperty:

<TextBlock Text="{Binding MyBindingProperty}" />

EDIT

I was wrong in saying you can't get at the items in the List - my bad. Your binding should look like this:

<TextBlock Text="{Binding [0].MyProperty}" />

If you need me I'll be in the corner enjoying my humble pie.

[浮城] 2024-12-18 19:14:50

我不是 SL 专家,但我认为您使用了错误的 Grid 对象;尝试以这种方式使用 DataGrid

<data:DataGrid x:Name="targetDataGrid">
     <data:DataGrid.Columns>
         <data:DataGridTextColumn Header="MyProperty" 
             Binding="{Binding MyProperty}" />
     </data:DataGrid.Columns>
 </data:DataGrid>

另请参阅此处了解更多详细信息:在运行时定义 Silverlight DataGrid 列

编辑:然后按此方式:

<Grid>
  <Grid.ColumnDefinitions>
  <ColumnDefinition />
  </Grid.ColumnDefinitions>
  <TextBlock Grid.Column="0" Text="{Binding MyProperty}" />
</Grid>

在此处找到:http://msdn.microsoft.com/en-us /library/cc278072%28v=VS.95%29.aspx 向下滚动文章...

I am not an expert of SL but I think your are using the wrong Grid object; try with DataGrid in this way:

<data:DataGrid x:Name="targetDataGrid">
     <data:DataGrid.Columns>
         <data:DataGridTextColumn Header="MyProperty" 
             Binding="{Binding MyProperty}" />
     </data:DataGrid.Columns>
 </data:DataGrid>

also see here for more details: Defining Silverlight DataGrid Columns at Runtime

Edit: then go this way:

<Grid>
  <Grid.ColumnDefinitions>
  <ColumnDefinition />
  </Grid.ColumnDefinitions>
  <TextBlock Grid.Column="0" Text="{Binding MyProperty}" />
</Grid>

found here: http://msdn.microsoft.com/en-us/library/cc278072%28v=VS.95%29.aspx scroll donw the article...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文