繁体   English   中英

DataGrid所选项目ReactiveUI

[英]DataGrid Selected Item ReactiveUI

我有一本ReactiveList书籍,并且能够使用反应式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);

但这对我没有用。 我是否缺少某些东西,或者我需要按照其他方式进行操作

也可以将datagrid 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);
  1. 如果要分配给私有成员变量,则您的ReactiveObject永远不会知道绑定属性已更改。 您更可能打算执行SelectedBookName = ((Book)x).Name); 请注意,如果要更改通知绑定,应将大写字母分配给属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM