Wahaj Khan Ответов: 2

C# как связать несколько текстовых полей из разных элементов массива с помощью WPF


Привет , я работаю над схемой архитектуры Model View. Я определил строковый массив, содержащий данные из трех различных источников в ViewModel.
Мне нужно связать 3 текстовых поля в представлении (пользовательский интерфейс) из разных элементов массива, которые поступают из ViewModel.
Я использую приложение WPF, которое содержит XAML

Спасибо

Что я уже пробовал:

Я привязал свойство text текстовых полей к этим элементам массива. Но это не работает. Как я могу это сделать?

Graeme_Grant

смотрите этот пост для получения аналогичного вопроса и ответа: Как мне получить состояние переключателей внутри списка для привязки данных?[^]

2 Ответов

Рейтинг:
2

Henrik Jonsson

Привет еще раз,

если у вас есть что-то вроде 40x3 элементов, это звучит так, что вы должны использовать DataGrid. Если у вас есть значения в String[][] MyMatrix свойство тогда вы могли бы привязать к этому" зубчатому " массиву вот так:

<DataGrid ItemsSource="{Binding MyMatrix}" AutoGenerateColumns="False" >
   <DataGrid.Columns>
       <DataGridTextColumn Binding="{Binding .[0]}" />
       <DataGridTextColumn Binding="{Binding .[1]}" />
       <DataGridTextColumn Binding="{Binding .[2]}" />
   </DataGrid.Columns>
</DataGrid>

Тип MyMatrix также может быть ObservableCollection<String[]>


Рейтинг:
0

Henrik Jonsson

Вы не описываете точно, что не работает. Привязка к свойству String array MyArray как это должно работать:

<TextBox Text="{Binding MyArray[0]}" /><Label Content="{Binding MyArray[0]}" />
<TextBox Text="{Binding MyArray[1]}" />
<TextBox Text="{Binding MyArray[2]}" />

Уведомление об изменении, однако, не будет работать, поэтому обновление первого элемента путем ввода чего-либо в первое текстовое поле сохранит значение в массиве, но не приведет к тому, что метка, связанная с тем же элементом, будет обновлена.


Wahaj Khan

Схема, которую вы описываете, не работает..На самом деле мне нужно заполнить три текстовых поля данными, поступающими из разных мест, скажем, 3 значения напряжений одного типа из 3 разных жестких изделий.
Один из способов сделать это-определить 3 открытых свойства, каждое из которых содержит значения, и привязать их к 3 текстовым полям, как показано ниже:
<имя текстового поля = "Текст1" текст="{привязки TextValue1}" /&ГТ;
<имя текстового поля = "Текст2" текст="{привязки TextValue2}" /&ГТ;
<имя текстового поля = "Текст3" текст="{привязки TextValue3}" /&ГТ;

Эта схема прекрасно работает и делает это в течение многих месяцев и заполняет данные правильным образом.
Однако тип данных, поступающих сейчас с жесткого диска, многочислен, скажем, 40 напряжений. таким образом, мы не можем определить свойства 40 * 3 = 120, скорее нам нужно определить открытые массивы для каждого вида напряжения и привязать элементы массива к отдельным текстовым полям, как вы предложили.
Но это не работает. Скорее он говорит
"Элемент пути MyArray[0] не может быть разрешен."
Когда мы выбираем применить привязку данных к текстовому свойству.