Я пытаюсь создать представление, содержащее ListBox, в котором его свойство ItemsSource связано с ObservableCollection, а его свойство ItemTemplate связано с другим свойством.Я знаю, что это неясно, поэтому я добавлю немного кода ...
Этот код является соответствующим разделом из моей разметки:
<ListBox ItemsSource="{Binding MyCollection}">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Content="{Binding FirstName}" Height="{Binding Path=Index, RelativeSource={RelativeSource AncestorType={x:Type local:MainWindowViewModel}}}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
('FirstName' является свойством типа Person, который является параметром типа моей коллекции. Я не добавлю код для этого класса, потому что он очень интуитивно понятен) Кодовое представление представления устанавливает DataContext для хранения ссылки и экземпляра этого класса ViewModel:
public class MainWindowViewModel : INotifyPropertyChanged
{
int index;
ObservableCollection<Person> myCollection;
public ObservableCollection<Person> MyCollection
{
get
{
if (myCollection == null)
{
//create the collection - not relevant for my question
}
return myCollection;
}
}
public int Index
{
get
{
//calculate value...
}
set
{
//set the value...
}
}
Поскольку я связываю ItemsSource с коллекцией, мне сложно связать свойства в моей ViewModel (мне удается просто связать свойства Person ...), и мой код выдает ошибку связывания в окне вывода:
Не удается найти источник для привязки со ссылкой 'RelativeSource FindAncestor, AncestorType =' SimpleMVVM.MainWindowViewModel ', AncestorLevel =' 1 ''.BindingExpression: Path = Index;DataItem = NULL;Целевым элементом является «Кнопка» (Имя = '');свойство target равно 'Height' (тип 'Double')
Может кто-нибудь помочь мне разобраться?(кстати - извините за плохой заголовок, я просто не мог найти ничего более ясного)