MvxObservableCollection 不更新 UI
MvxObservableCollection does not update the UI
我有一个 MvxListView,它有一个 MvxObservableCollection 作为它的 ItemsSource:
View.xml
...
<Mvx.MvxListView
android:layout_width="fill_parent"
android:layout_weight="6"
android:layout_height="wrap_content"
android:divider="@null"
local:MvxItemTemplate="@layout/navigationmenuitemrow"
local:MvxBind="ItemsSource MenuItems; ItemClick NavigateCommand"/>
...
ViewModel.cs
...
private MvxObservableCollection<NavigationItemViewModel> _menuItems = new MvxObservableCollection<NavigationItemViewModel>();
public MvxObservableCollection<NavigationItemViewModel> MenuItems
{
get => _menuItems;
set
{
_menuItems = value;
RaisePropertyChanged(() => MenuItems);
}
}
...
我的 NavigationItemViewModel 如下所示:
public class NavigationItemViewModel : MvxNotifyPropertyChanged
{
public string NavigationCode { get; set; }
public string DisplayText { get; set; }
public string Selector { get; set; }
}
当我使用 MenuItems 的数据初始化 ViewModel 时,我能够看到视图中的所有项目。但是,如果我从列表中删除所有条目并用新条目替换它们,视图不会更新,直到我再次触摸屏幕。我正在删除这样的条目:
MvxObservableCollection<NavigationItemViewModel> tmpList = new MvxObservableCollection<NavigationItemViewModel>();
foreach (var navigationMenuItem in _navigationMenu.ChildNodes)
{
tmpList.Add(Map(navigationMenuItem));
}
MenuItems = tmpList;
我之前也试过这个:
MenuItems.Clear();
foreach (var navigationMenuItem in _navigationMenu.ChildNodes)
{
MenuItems.Add(Map(navigationMenuItem));
}
这可能是什么原因造成的?任何帮助将不胜感激!
好吧,我找到了问题的根源:
我没有在构造函数中将 MvxObservableCollection 设置为新的 MvxObservableCollection,而是在 Initialize 方法中设置,这导致了此行为。因此,绑定可能不会因更改而持续。
我有一个 MvxListView,它有一个 MvxObservableCollection 作为它的 ItemsSource:
View.xml
...
<Mvx.MvxListView
android:layout_width="fill_parent"
android:layout_weight="6"
android:layout_height="wrap_content"
android:divider="@null"
local:MvxItemTemplate="@layout/navigationmenuitemrow"
local:MvxBind="ItemsSource MenuItems; ItemClick NavigateCommand"/>
...
ViewModel.cs
...
private MvxObservableCollection<NavigationItemViewModel> _menuItems = new MvxObservableCollection<NavigationItemViewModel>();
public MvxObservableCollection<NavigationItemViewModel> MenuItems
{
get => _menuItems;
set
{
_menuItems = value;
RaisePropertyChanged(() => MenuItems);
}
}
...
我的 NavigationItemViewModel 如下所示:
public class NavigationItemViewModel : MvxNotifyPropertyChanged
{
public string NavigationCode { get; set; }
public string DisplayText { get; set; }
public string Selector { get; set; }
}
当我使用 MenuItems 的数据初始化 ViewModel 时,我能够看到视图中的所有项目。但是,如果我从列表中删除所有条目并用新条目替换它们,视图不会更新,直到我再次触摸屏幕。我正在删除这样的条目:
MvxObservableCollection<NavigationItemViewModel> tmpList = new MvxObservableCollection<NavigationItemViewModel>();
foreach (var navigationMenuItem in _navigationMenu.ChildNodes)
{
tmpList.Add(Map(navigationMenuItem));
}
MenuItems = tmpList;
我之前也试过这个:
MenuItems.Clear();
foreach (var navigationMenuItem in _navigationMenu.ChildNodes)
{
MenuItems.Add(Map(navigationMenuItem));
}
这可能是什么原因造成的?任何帮助将不胜感激!
好吧,我找到了问题的根源:
我没有在构造函数中将 MvxObservableCollection 设置为新的 MvxObservableCollection,而是在 Initialize 方法中设置,这导致了此行为。因此,绑定可能不会因更改而持续。