[英]WPF Binding to specific property
我是DataBinding的新手,但想完成以下工作:
我有一个ViewModel,其中包含对象的集合: CollectionOfStuff
每个对象Stuff
都有一些属性: Name
, Value
。
在我的视图中,我有一个带有某些TextBlock
的StackPanel
。 我想将TextBlock的Text
属性绑定到特定属性。 (我想绑定到Value
时Name
的Stuff
是“有些名”)
在我的StackPanel
我已经将DataContext
设置为集合。
但是对于文本块,当我尝试... Text="{Binding Path=Value"}
...我只得到CollectionOfStuff
的第一个对象。 Name
为“ some name”时,如何选择性地绑定到对象的Value
?
我认为 ,根据您的描述,您想使用ItemsControl,默认情况下它由StackPanel支持。 它将显示具有给定模板的所有项目(我提供了一个非常简单的模板)。 它看起来像这样:
<ItemsControl ItemsSource="{Binding CollectionOfStuff}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock HorizontalAlignment="Left" Text="{Binding Name}" />
<TextBlock HorizontalAlignment="Right" Text="{Binding Value}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
那是你想做的吗? 如果是这样,则忽略其余部分。
但是,如果要绑定到列表中的特定项目,则需要确保CollectionOfStuff强制使用this[string index]
索引器(非常重要的步骤)。 然后,您可以按名称进行标注:
<StackPanel DataContext="{Binding CollectionOfStuff['theName']}"></StackPanel>
<TextBlock HorizontalAlignment="Left" Text="{Binding Name}" />
<TextBlock HorizontalAlignment="Right" Text="{Binding Value}" />
</StackPanel>
如果您要走这条路线,但您无法控制CollectionOfStuff
的集合类型,那么您始终可以在ViewModel上创建自己的索引器:
public object this[string indexer]
{
get
{
return CollectionOfStuff.FirstOrDefault(s => s.Name == indexer);
}
}
然后,您在StackPanel上的DataContext将如下所示: DataContext="{Binding ['theName']}"
我想这一切都取决于您到底要做什么。 您的解决方案是在这个答案的某个地方:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.