0

У меня есть ReactiveObject класс с именем GroupedIssueTypeSearchFilter:ReactiveUI BindTo не обновляя ReactiveList

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 значение не изменено. Мне нужно закрыть View, повторно открыть его, после чего его значение будет обновлено.

Как сделать GroupedIssueTypesFilter следует за изменениями в GroupedStandardIssueTypesTV?

ответ

0

Я думаю, ваша проблема в том, что вы не поднимая изменения в вашем ReactiveList объявляя это нравится:

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

Попробуйте это:

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

Без RaiseAndSetIfChanged вы won`t будут общения изменения вид в вашей коллекции.

Вы также можете подписаться на наблюдаемых, ReactiveList разоблачением как:

ItemsAdded 
ItemsRemoved 
ItemsMoved 
Changed 
etc 

Больше информации здесь: https://docs.reactiveui.net/en/user-guide/lists/index.html

+0

Я уже попробовать это раньше, и это не работает. Каждый раз, когда я перезагружаю таблицу, список не обновляется. – currarpickt

3

Полностью согласен с @ramonesteban78 answer.

Но вы можете пойти по-другому и пополнить свой ReactiveList с помощью методов Clear и Add/AddRange.

Как это:

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

Не забудьте прочитать о «подавляя Notifications» здесь: https://docs.reactiveui.net/en/user-guide/lists/index.html

Смежные вопросы