I THINK , из вашего описания вы хотите использовать 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);
}
}
Тогда ваш DataContext на вашей StackPanel будет выглядеть так: DataContext="{Binding ['theName']}"
Я полагаю, все зависит от того, что именно вы пытаетесьделать.Ваше решение в этом ответе где-то:)