Связывание SelectedItem в comobox с текущим ItemSource?

Так что я пытаюсь добиться привязки текущего элемента из ItemsSource к SelectedItem в Comobox. Я надеюсь, что следующий (упрощенный пример) код продемонстрирует то, что я хочу.

public class book : INotifyPropertyChanged{
private string _title;
private string _author;

public book(){
    this.Title = "";
    this.
}
public string Title{
    get{return _title;}
    set{
        _title = value;
                NotifyPropertyChanged("Title");

    }
}
public string Author{
    get{return _author;}
    set{
        _author = value;
        NotifyPropertyChanged("Author");
    }
}

    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

Код ThisViewModel.cs:

public class ThisViewModel{
    private ObservableCollection<Book> _book;
    private List<Book> _existedBooks;
    public ObservableCollection<Book> Book{
        get{return _book;}
        set{_book = value;}
    }

    public ThisViewModel(){
        Books = new ObservableCollection<Book>();
        Books.Add(new Book())
    }
    public List<Book> ExistedBooks{
        get{return _existedBooks;}
        set{_existedBooks = value;}
    }
}

Код позади ThisView.xaml.cs:

public partial class ThisView{
    public ThisView(){
        InitializeComponent();
        this.DataContext = new ThisViewModel();

    }
}

Код XAML ThisView.xaml:

<ItemsControl ItemsSource="{Binding Path=Book}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ComboBox  ItemsSource="{Binding Path=ExistedBooks}"  
            DisplayMemberPath="Title"
            SelectedItem="{Binding <HERE IS MY PROBLEM>}"
            ></ComboBox>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Как я могу связать selectedItem (одну из существующих книг) с текущим ItemControl Item (Book).

Надеюсь, я достаточно ясно изложил свою точку зрения. Спасибо за ваше время.

1 ответ

Решение

Вы должны добавить то же самое Book Объект для обеих коллекций, чтобы это работало:

public ThisViewModel()
{
    Book = new ObservableCollection<Book>();
    ExistedBooks = new List<Book>();

    Book bookA = new Book() { Title = "Title A" };
    Book.Add(bookA);
    ExistedBooks.Add(bookA);
}

Затем вы можете привязать свойство SelectedItem ComboBox к текущему элементу в ItemsControl следующим образом:

<ItemsControl ItemsSource="{Binding Path=Book}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ComboBox  ItemsSource="{Binding DataContext.ExistedBooks, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
                               SelectedItem="{Binding Path=., Mode=OneWay}"
                               DisplayMemberPath="Title" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
Другие вопросы по тегам