DataGrid Selected Item ReactiveUI



我有一个ReactiveList Books,并能够使用响应式UI将其绑定到网格。我试图从datagrid中获取选中的项目,以便进一步查询BookService以获取更多详细信息,并在不同的网格或datagrid本身的行细节中显示详细信息。我的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
}

我试图获得选中的书的名称,并将其分配给视图模型的构造函数中的SelectedBookName。

this.WhenAnyObservable(x=>x.Books.ItemChanged).Select(x => selectedBookName= ((Book)x).Name);

但这对我不起作用。是我错过了什么,还是我需要遵循其他方式

还可以将数据网格SelectedItem直接绑定到视图模型中的属性,该属性提供对整个对象的访问

this.Bind(ViewModel, x => x.SelectedBook, x => x.DataGridBooks.SelectedItem);

如果您只想要书名,那么您可以使用SelectedValue

我看到了两个问题:

  1. 你实际上并没有订阅正在监听ReactiveList变化的Observable,所以你不会得到任何更新。你可能想要:

this.WhenAnyObservable(x=>x.Books.ItemChanged).Subscribe(x => selectedBookName= ((Book)x).Name);
  • 如果你分配给一个私有成员变量,那么你的ReactiveObject永远不会知道绑定属性已经改变。更有可能你的意思是做SelectedBookName = ((Book)x).Name);注意大写,因为如果你想要更改通知绑定,你应该分配给属性。
  • 相关内容

    • 没有找到相关文章

    最新更新