У меня есть сетка данных в представлении
<Grid x:Name="LayoutRoot" Background="White" Width="600" MaxHeight="150">
<sdk:DataGrid x:Name="grid1" ItemsSource="{Binding Persons}" SelectedItem="{Binding MyList, Mode=TwoWay}">
</sdk:DataGrid>
</Grid>
В моей ViewModel у меня есть следующий код
private ObservableCollection<string> myList;
public ObservableCollection<string> MyList
{
get { return myList; }
set
{
myList = value;
NotifyPropertyChanged(vm => vm.MyList);
}
И для DG
private ObservableCollection<Person> person;
public ObservableCollection<Person> Persons
{
get { return person; }
set
{
person = value;
NotifyPropertyChanged(vm => vm.Persons);
}
}
Iнадеялся, что из представления я смогу связать выбранный элемент (строку) сетки данных с коллекцией MyList в моей модели представления (может быть, IList против OC?).Мне нужно только одно значение из выбранной строки, например адрес или почтовый индекс.Но нужно ли передавать всю коллекцию, могу ли я получить только одно значение ячейки в модель представления другим способом?
Например, вот класс, который я использую для заполнения сетки данных
public void CreateList()
{
Person p = new Person();
p.FirstName = "Bob";
p.LastName = "Jones";
p.Address = "123 Main Street";
p.City = "Wilmington";
p.State = "NC";
p.Zip = "12345";
Person p1 = new Person();
p1.FirstName = "Sue";
p1.LastName = "Smith";
p1.Address = "1222 Main Street";
p1.City = "Tampa";
p1.State = "FL";
p1.Zip = "12345";
Person p2 = new Person();
p2.FirstName = "Chris";
p2.LastName = "Jones";
p2.Address = "234 Water Street";
p2.City = "Dallas";
p2.State = "TX";
p2.Zip = "22222";
Person p3 = new Person();
p3.FirstName = "Andy";
p3.LastName = "Jones";
p3.Address = "434 Main Street";
p3.City = "Columbia";
p3.State = "SC";
p3.Zip = "12345";
ObservableCollection<Person> Result = new ObservableCollection<Person>();
Result.Add(p);
Result.Add(p1);
Result.Add(p2);
Result.Add(p3);
Persons = Result;
}
Этот класс запускается при загрузке модели представления.Я хотел бы иметь возможность выбрать третью строку данных и передать только значение адреса обратно в виртуальную машину.Моей первоначальной мыслью было передать всю выбранную строку обратно в виртуальную машину, а затем извлечь адрес из этой коллекции.
Использование привязки selectedItem не работает, выбор строки никогда не вызывает событие inotify в виртуальной машине, поэтому я знаю, что коллекция не обновляется, пока я не нажму на DG, а затем за ее пределами, который пропускает только нользначение.Во-вторых, есть ли более эффективный способ сделать это по сравнению с использованием кода для извлечения значения и его передачи в виртуальную машину?Я подумал об использовании события изменения выбора в представлении, а затем установил значение столбца в связанном поле, которое передается в виртуальную машину, но это кажется хакерским.
Спасибо за любые предложения или идеи.
-cheers