Задать вопрос
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia

В чем ошибка при связывании (binding'е) данных?

Всем привет!
Возникла ошибка при связывании данных.
Есть родительский и подчиненный контроллы в которых реализовано свойство зависимостей SelectedIndex.
Далее в родительском контролле связываю это свойство с таким же свойством подчиненного:
//this = currentObject; 
//typeof(this) == typeof(Reader);

var indexBinding = new Binding();
indexBinding.Mode = BindingMode.TwoWay;
//указываю подчненный контролл как источник данных
indexBinding.Source = epubConrol.SelectedIndex;
//Очищаю свойство зависимостей и создаю привязку 
currentObject.ClearValue(Reader.SelectedIndexProperty);
currentObject.SetBinding(Reader.SelectedIndexProperty, indexBinding);

Потом, если менять SelectedItem главного котролла с помощью кнопок страницы - все работает нормально, котролл прокручивает Item подчиненного котролла. Если я делаю свайп по подчиненному контроллу, то в родительский контролл не приходит уведомление об изменении.

В чем может быть причина?
  • Вопрос задан
  • 2519 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sumor
Для TwoWay нужно указывать с использованием Path или XPath.

Попробуй так:
//this = currentObject; 
//typeof(this) == typeof(Reader);

var indexBinding = new Binding();
indexBinding.Mode = BindingMode.TwoWay;
//указываю подчненный контролл как источник данных
indexBinding.ElementName = "epubConrol";
indexBinding.Path = new PropertyPath("SelectedIndex");
//Очищаю свойство зависимостей и создаю привязку 
currentObject.ClearValue(Reader.SelectedIndexProperty);
currentObject.SetBinding(Reader.SelectedIndexProperty, indexBinding);


На Xaml это будет выглядеть примерно так:
<ListBox x:Name="lst1" SelectedIndex="{Binding ElementName=lst2, Path=SelectedIndex, Mode=TwoWay}">
    <system:String>1 строка</system:String>
    <system:String>2 строка</system:String>
</ListBox>
<ListBox Grid.Column="1" x:Name="lst2">
    <system:String>1 строка</system:String>
    <system:String>2 строка</system:String>
</ListBox>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы