Это отличное место, чтобы иметь модель . Вот еще одна ссылка ViewModel
То, что я хотел бы сделать, это иметь следующее в ViewModel (которая связана с компонентами в представлении)
свойство IObservable, привязанное кисточник элементов поля со списком, который вы добавляете / удаляете в зависимости от размера массива
свойство int для выбранного индекса, связанного с SelectedElement поля со списком.Вам нужно будет выполнить преобразование из строки в int, когда это свойство устанавливается.
строковое свойство, которое связано с textbox.text (вы, вероятно, можете использовать метку здесь, by), которая являетсяобновляется каждый раз, когда вышеупомянутое свойство int для выбранного индекса изменяется.
Если это вообще сбивает с толку, я могу создать некоторый псевдокод, но эти три свойства должны работать и получать то, что вы хотите.
Изменить - Чтобы добавить код:
public class YourViewModel : DependencyObject {
public string[] FictionArray {get; private set;}
public IObservable<string> AvailableIndices;
public static readonly DependencyProperty SelectedIndexProperty=
DependencyProperty.Register("SelectedIndex", typeof(string), typeof(YourViewModel), new PropertyMetadata((s,e) => {
var viewModel = (YourViewModel) s;
var index = Convert.ToInt32(e.NewValue);
if (index >= 0 && index < viewModel.FictionArray.Length)
viewModel.TextBoxText=FictionArray[index];
}));
public bool SelectedIndex {
get { return (bool)GetValue(SelectedIndexProperty); }
set { SetValue(SelectedIndexProperty, value); }
}
public static readonly DependencyProperty TextBoxTextProperty=
DependencyProperty.Register("TextBoxText", typeof(string), typeof(YourViewModel));
public bool TextBoxText {
get { return (bool)GetValue(TextBoxTextProperty); }
set { SetValue(TextBoxTextProperty, value); }
}
public YourViewModel(string[] fictionArray) {
FictionArray = fictionArray;
for (int i = 0; i < FictionArray.Length; i++){
AvailableIndices.Add(i.ToString()));
}
}
}
Это не идеально, но оно должно дать вам некоторое представление о том, как вы можете создать модель представления со свойствами, с которыми вы могли бы связываться.Так что в вашем xaml у вас будет что-то вроде:
<ComboBox ItemSource="{Binding AvailableIndices}" SelectedItem="{Binding SelectedIndex}"/>
<TextBox Text="{Binding TextBoxText}"/>