我有一个包含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中的一个错误,所以我只需找到一个解决方法:(
答案 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}" />
如果你需要我,我会在角落里享受我不起眼的馅饼。