我有一個觀點Silverlight中如何通過數據網格的選定行查看模型
<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>
在我的視圖模型中的數據網格,我有以下代碼
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);
}
}
我希望從視圖中我可以綁定數據網格的選定項目(行)到我的競爭中的MyList集合w模型(也許IList vs OC?)。我只需要選定行中的一個值,例如地址或zip。但是,我是否需要將整個集合傳遞給視圖模型?
例如,下面是我使用的填充數據網格
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綁定不起作用,選擇行從不觸發vm中的inotify事件,所以我知道該集合沒有被更新,除非我點擊DG然後在它之外單擊並傳遞一個空值。其次,是否有更好的方法來做到這一點,而不是使用後面的代碼來拉取值然後傳遞給VM?我曾想過在視圖中使用選擇已更改的事件,然後將列值設置爲傳遞給虛擬機的綁定字段,但這看起來很詭異。
感謝您的任何建議或想法。
-cheers
謝謝安東尼我使用我的名單,因爲我試圖選擇整行。在使用selectedItem時使用Datagrid時,這不會選擇整行元素嗎?這可能是我在那裏玩的地方。 – rlcrews
@ramdyc:「整行」只是一個人。 – AnthonyWJones
是的,這是正確的。然而,在這個解決方案中,我必須從Person中派生出一個值,並在第二個查詢中使用它來檢索關聯的數據。我嘗試了您建議的確切代碼,並且從未在ViewModel中觸發selectedItem(即,我將選擇一行,但VM中的屬性永遠不會更新)。任何想法爲什麼selectedItem不會填充? (我有TwoWay設置和viewmodel被綁定到視圖)我可以張貼壓縮示例項目,如果這將有所幫助。謝謝 – rlcrews