繁体   English   中英

ReactiveUI BindTo不更新ReactiveList

[英]ReactiveUI BindTo not updating the ReactiveList

我有一个名为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<GroupedIssueTypeSearchFilter>

稍后,通过在ViewModel进行一些操作, 更改GroupedStandardIssueTypesTV.IssueTypeFilterList值。

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

如何使GroupedIssueTypesFilter跟随变化GroupedStandardIssueTypesTV

完全同意@ ramonesteban78的回答

但是您可以采用另一种方式,用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/zh/user-guide/lists/index.html

我认为您的问题是您没有在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

暂无
暂无

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

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