【问题标题】:ReactiveUI BindTo not updating the ReactiveListReactiveUI BindTo 不更新 ReactiveList
【发布时间】:2016-12-06 08:19:03
【问题描述】:

我有一个名为GroupedIssueTypeSearchFilterReactiveObject 类:

public class GroupedIssueTypeSearchFilter : ReactiveObject
{
    public int CategoryID { get; set; }
    public string CategoryTitle { get; set; }

    int selectionCode;
    public int SelectionCode
    {
        get { return selectionCode; }
        set { this.RaiseAndSetIfChanged(ref selectionCode, value); }
    }

    public ReactiveList<IssueTypeSearchFilter> IssueTypeFilterList { get; set; }

    public GroupedIssueTypeSearchFilter(int catID, string catTitle, List<IssueTypeSearchFilter> issueTypeList)
    {
        this.CategoryID = catID;
        this.CategoryTitle = catTitle;
        this.IssueTypeFilterList = new ReactiveList<IssueTypeSearchFilter>(issueTypeList);
    }
}

那么在IssueTypeFilterTableViewDelegate类中,它的属性之一是GroupedIssueTypesFilter

public ReactiveList<GroupedIssueTypeSearchFilter> GroupedIssueTypesFilter { get; set; }

我还有一个ViewController 和它的ViewModel。我使用BindTo 将视图模型属性之一绑定到该类:

IssueTypeFilterTableViewDelegate tvd = new IssueTypeFilterTableViewDelegate();
this.WhenAnyValue(vm => vm.ViewModel.GroupedStandardIssueTypesTV)
    .BindTo(this, x => x.tvd.GroupedIssueTypesFilter);

GroupedStandardIssueTypesTV 类型为ReactiveList&lt;GroupedIssueTypeSearchFilter&gt;

后来,通过ViewModel 内部的一些操作,GroupedStandardIssueTypesTV.IssueTypeFilterList 的值改变了

但是,GroupedIssueTypesFilter.IssueTypeFilterList 的值没有改变。我需要关闭视图,重新打开它,然后它的值将被更新。

如何让GroupedIssueTypesFilter跟随GroupedStandardIssueTypesTV的变化?

【问题讨论】:

    标签: c# binding observablecollection reactive-programming reactiveui


    【解决方案1】:

    完全同意@ramonesteban78 answer

    但您可以采用另一种方式,使用 Clear 和 Add/AddRange 方法重新填充您的 ReactiveList。

    像这样:

    public GroupedIssueTypeSearchFilter(int catID, string catTitle, List<IssueTypeSearchFilter> issueTypeList)
    {
        this.CategoryID = catID;
        this.CategoryTitle = catTitle;
        this.IssueTypeFilterList.Clear();
        this.IssueTypeFilterList.AddRange(issueTypeList);
    }
    

    不要忘记在此处阅读有关“抑制通知”的信息:https://docs.reactiveui.net/en/user-guide/lists/index.html

    【讨论】:

      【解决方案2】:

      我认为您的问题是您没有在 ReactiveList 中提出更改,声明如下:

      public ReactiveList<IssueTypeSearchFilter> IssueTypeFilterList { get; set; }
      

      试试这个:

      ReactiveList<IssueTypeSearchFilter> issueTypeFilterList
      public ReactiveList<IssueTypeSearchFilter> IssueTypeFilterList 
      { 
          get { return  issueTypeFilterList; }; 
          set { this.RaiseAndSetIfChanged(ref issueTypeFilterList, value); }; 
      }
      

      没有RaiseAndSetIfChanged,您将无法传达对集合中视图的更改。

      您还可以订阅 ReactiveList 公开的可观察对象,例如:

      ItemsAdded
      ItemsRemoved
      ItemsMoved
      Changed
      etc
      

      更多信息在这里:https://docs.reactiveui.net/en/user-guide/lists/index.html

      【讨论】:

      • 我之前已经尝试过了,但它不起作用。每次我重新加载表格时,列表都不会更新。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      相关资源
      最近更新 更多