DataBinding到Silverlight中的List

时间:2011-10-24 19:03:03

标签: silverlight data-binding

我有一个包含TextBlock的Grid。 Grid的DataContext的类型为List<MyClass>,我想将TextBlock.Text属性绑定到List中第一个元素的MyClass.MyProperty属性。我试过像:

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

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

修改

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

编辑2:

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

2 个答案:

答案 0 :(得分:0)

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

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

另请参阅此处了解详情:Defining Silverlight DataGrid Columns at Runtime

编辑:然后这样:

<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滚动文章......

答案 1 :(得分:0)

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

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}" />

如果你需要我,我会在角落里享受我不起眼的馅饼。