我有一个ReactiveList Books,并且能够使用反应式UI将其绑定到网格。 我正在尝试从datagrid获取所选项目,以便我进一步查询BookService以获取更多详细信息,并在datagrid本身的不同网格或rowdetail中显示详细信息。 我的ViewModel具有以下属性
private ReactiveList<Book> books;
public ReactiveList<Book> Books
{
get
{
return books;
}
set
{
this.RaiseAndSetIfChanged(ref books, value);
}
}
private string selectedBookName;
public string SelectedBookName
{
get
{
return selectedBookName;
}
set
{
this.RaiseAndSetIfChanged(ref selectedBookName, value);
}
}
Book对象如下所示
public class Book
{
public string Name{get;set;}
public decimal Price{get;set;}
.
.
.//other properties
}
我试图获取所选书籍的名称,并将其分配给viewmodel构造函数中的SelectedBookName。
this.WhenAnyObservable(x=>x.Books.ItemChanged).Select(x => selectedBookName= ((Book)x).Name);
但这对我没有用。我错过了什么,或者我需要遵循其他方式
答案 0 :(得分:2)
还可以将数据网格SelectedItem
直接绑定到视图模型中的属性,该模型提供对整个对象的访问权限
this.Bind(ViewModel, x => x.SelectedBook, x => x.DataGridBooks.SelectedItem);
如果只想要书名,则可以使用SelectedValue
答案 1 :(得分:0)
我看到两个问题:
ReactiveList
更改的Observable,因此您不会获得任何更新。你可能想要:this.WhenAnyObservable(x=>x.Books.ItemChanged).Subscribe(x => selectedBookName= ((Book)x).Name);
ReactiveObject
永远不会知道绑定属性已更改。您更有可能做SelectedBookName = ((Book)x).Name);
注意大写,因为如果您希望更改通知绑定,您应该分配给该属性。