Как привязать динамически генерируемые TextBox к значениям DataGrid в WPF? - PullRequest
0 голосов
/ 01 марта 2019

Моя проблема в основном описана в заголовке этой темы.

У меня есть таблица данных, которая динамически заполняется различными записями:

<DataGrid
    x:Name="searchResult"
    AutoGenerateColumns="True"
    IsSynchronizedWithCurrentItem="True"
    ItemsSource="{Binding Path=SearchResult}" />

Рядом с ней находится набор текстовых блоковтакже динамически генерируется:

<ItemsControl
    x:Name="searchForm"
    ItemTemplate="{StaticResource formInputTest}"
    ItemsSource="{Binding SearchForm, UpdateSourceTrigger=PropertyChanged}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

Шаблон, который я использую в ItemsControl, выглядит в основном так:

<TextBox
    Tag="{Binding Index}"
    Text="{Binding ElementName=searchResult, Path=SelectedValue.a, UpdateSourceTrigger=PropertyChanged}" />

Теперь давайте предположим, что моя сетка данных имеет 2 столбца (a и b) и яиметь 2 текстовых поля с одинаковыми именами (а и б).Теперь я хочу выбрать решетку данных и, как два текстовых поля, которые будут автоматически заполнены значениями из соответствующей строки.

К сожалению, я не знаю, как получить это динамическое связывание.Если я связываю свойство TextBox Text-свойства статически с searchResult-> SelectedValue.a, оно работает нормально, но, как вы можете видеть, только статическое.Это то, что я сделал в третьем кодовом поле выше.

ItemsControl, который содержит TextBoxes, имеет привязку к "SearchForm".SearchForm имеет свойство «Index», которое является именем столбца.Итак, TextBox знает имя столбца, к которому он должен быть привязан.Чтобы прояснить это, я связал TextBox.Tag с индексом, который отлично работает.

По сути, я хочу, чтобы моя привязка TextBox выглядела так:

<TextBox
    Text="{Binding ElementName=searchResult, Path=SelectedValue.{Binding Index}, UpdateSourceTrigger=PropertyChanged}" />

Но, как вы могли бызнаете, привязка внутри привязки не работает.

Кто-нибудь знает, как связать их с динамически генерируемыми объектами вместе?Спасибо за любую подсказку!

ОБНОВЛЕНИЕ 2019/03/2007

Спасибо, dymanoid!Это принесло мне некоторый прогресс, но я все еще не на финишной прямой.

Я создал свойство view-model и связал с ним как Datagrid-SelectedItem, так и свойство TextBox-Text.Поскольку SelectedItem является своего рода словарем (BindablePublicDictionary), я использую конвертер (IMultiValueConverter) в TextboxBinding, чтобы преобразовать запись словаря как в индекс текстового поля, так и в текст / значение.

Это работаетхорошо, я выбираю строку данных, и 3 динамически сгенерированных поля ввода заполнены.

К сожалению, если я отредактирую одно из этих заполненных текстовых полей, остальные 2 будут очищены, а моя сетка данных не изменится.

Я реализовал OnPropertyChanged, мои привязки - TwoWay, и вызывается функция ConvertBackFunction, которая возвращает данные в соответствии с типом targetType из самой функции.

Кто-нибудь имеет опыт работы с привязками / преобразователем между сетью данных / словареми текстовые поля, особенно в отношении функции convertBack?

...