我正在使用Xamarin.Forms MVVM移动应用,其页面的ListView
。
我尝试访问ViewCell
中的ListView
之一,然后在页面加载后立即更新ViewCell
内的内容。最后,我尝试制作动画(通过TranslateTo()
),但出于测试目的,我只想尝试在ViewCell
内隐身(通过设置IsVisible = false
)。
它适用于我的iOS项目,但不适用于我的UWP项目。什么都没发生; ViewCell
内容永远不会受到影响。
基本代码是:
----------------
MyPage.cs
----------------
public MyPage() // constructor
{
_viewModel = new MyViewModel();
...
...
}
// on page load, subscribe to a message that modifies a ViewCell in the ListView;
// when that message is called in the ViewModel, it correctly modifies the ViewCell
// in iOS, but in UWP it does nothing;
protected override async void OnAppearing()
{
MessagingCenter.Subscribe<MyViewModel>(this, "ModifyViewCell", (sender) =>
{
// get item cell to modify (for testing, just get first one);
// see code in ListViewExt.cs a little farther down for GetCell() method
MyViewCellView viewCell = GetCell(0); // MyViewCellView : ViewCell
// modify cell - try different methods
viewCell.IsEnabled = false;
viewCell.View.IsVisible = false;
viewCell.MyViewInsideCell.IsVisible = false; // <<<==== breakpoint
}
}
-------------------
MyViewModel.cs
-------------------
public MyViewModel() // constructor
{
// send message to update ViewCell in ListView
Device.BeginInvokeOnMainThread(() => {
MessagingCenter.Send(this, "ModifyViewCell");
});
}
调用ViewCell
方法时,ListView
的{{1}} ListView
存储在自定义ListViewExt
类(ListView.SetupContent()
)的词典中(在下面重写) ):
ListViewExt.cs
------------------------
// store ListView ViewCell's in dictionary for access later
public Dictionary<int, ViewCell> CellDict { get; set; } = new Dictionary<int, ViewCell>();
protected override void SetupContent(Cell cell, int index)
{
base.SetupContent(cell, index);
// add ViewCell to dictionary on SetupContent()
CellDict.Add(index, (ViewCell)cell);
}
public GetCell(int index)
{
return CellDict[index];
}
我还尝试在我尝试修改ViewCell
的行中的代码中设置断点(我在上面的代码中注释了注释中的断点) ),当我将鼠标悬停在viewCell
上时,Intellisense似乎表明我对ViewCell
视图(viewCell.MyViewInsideCell
- 有一个有效的引用 - 它说它是Xamarin。 Forms.Grid,它是)。但即使有一个有效的参考,我似乎也不会影响它的任何属性。
这是一个Xamarin UWP错误吗?它似乎是。
我已经记录了bug in Bugzilla here。