Как я могу заставить диалоговое окно возвращать выбранный элемент из списка?
Как я могу заставить диалоговое окно , которое принимает в свою модель представления список типа IEnumerable<string> и отображает его в ListBox'e, возвратить выбранный элемент переменной типа string либо индекс элемента в IEnumerable?
В данном примере я попытался решить проблему передавая ссылку на stringпеременную по цепочке:
внешний код -> код окна -> модель представления
Внешний код:
//Строковая переменная, которая хранит ссылку на выбранный элемент списка
string SelectedName = string.Empty;
//Создаем конструктор окна, передаем в конструктор список и переменную с выбранным элементом
Window_ListPicker windowCourt = new Window_ListPicker(Statics.CourtNames, ref SelectedName);
windowCourt.ShowDialog();
if(SelectedName != string.Empty)
{
//Обработка результата
}
windowCourt.Close();
Окно Window_ListPicker:
public partial class Window_ListPicker : Window
{
public Window_ListPicker(IEnumerable<string> sourceList, ref string resultProperty)
{
ViewModelListPicker VM = new ViewModelListPicker(ref resultProperty);
VM.SourceList = sourceList;
VM.HideAction = new Action(this.Hide);
DataContext = VM;
InitializeComponent();
}
}
Код модели представления ViewModelListPicker:
class ViewModelListPicker : INotifyPropertyChanged
{
public ViewModelListPicker(ref string selectedItem)
{
this.SelectedItem = selectedItem;
}
public IEnumerable<string> SourceList { get; set; }
private string selectedItem;
public string SelectedItem
{
get { return selectedItem; }
set
{
if (value != string.Empty)
{
selectedItem = value;
OnPropertyChanged("SelectedItem");
HideWindow.Execute(null);
}
}
}
public Action HideAction { get; set; }
private RelayCommand hideWindow;
public RelayCommand HideWindow
{
get
{
return hideWindow ?? (hideWindow = new RelayCommand(obj => HideAction()));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string prop = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
}
Когда я запускаю код, изменение выбранного элемента в модели представления не меняет переменную во внешнем коде. Что я делаю не так? Возможно я выбрал принципиально неправильный подход. Как решить эту задачу?