WPF绑定到特定的属性
问题描述:
我是新来的数据绑定,但想完成以下任务:WPF绑定到特定的属性
我有一个视图模型具有对象的集合:CollectionOfStuff
每个对象Stuff
有一些属性:Name
,Value
。
在我看来,我有一个StackPanel
与一些TextBlock
s。我想将TextBlock的Text
属性绑定到特定属性。 (我想结合Value
当Stuff
Name
是“有些名”)
在我StackPanel
我已经设置了DataContext
到集合。
但是对于文本块,当我尝试... Text="{Binding Path=Value"}
...我只获得CollectionOfStuff
中的第一个对象。当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 implents一个this[string index]
索引(非常重要的一步)。然后,您可以通过名字来称呼它:
<StackPanel DataContext="{Binding CollectionOfStuff['theName']}"></StackPanel>
<TextBlock HorizontalAlignment="Left" Text="{Binding Name}" />
<TextBlock HorizontalAlignment="Right" Text="{Binding Value}" />
</StackPanel>
如果你要这条路线,但你没有集合类型的控件CollectionOfStuff
是,那么你总是可以创建自己的索引你的视图模型:
public object this[string indexer]
{
get
{
return CollectionOfStuff.FirstOrDefault(s => s.Name == indexer);
}
}
然后,你对你的StackPanel的DataContext应该是这样的:DataContext="{Binding ['theName']}"
我想这一切都取决于,究竟是什么,你正在试图做的。你的解决方案是在这个答案的某个地方:)
是“某个名称”特定于每个文本框? – 2010-07-04 18:10:37
是的,例如一个TextBlock将是标题,所以我基本上需要的东西的对象的值,其中名称=“标题” – 2010-07-04 18:11:42