我有以下课程:
namespace Model {
public abstract class TrackerBase : ITrackerComponent { }
public class ClickTracker : TrackerBase, IClickRecorder { }
public class ClicksLeftTracker : TrackerBase, IClickRecorder { }
}
namespace Model.Interfaces {
public interface IClickRecorder
{
List<DateTime> Clicks { get; }
}
public interface ITrackerComponent : INotifyPropertyChanged
{
int ID { get; set; }
string Name { get; set; }
ICommand OnOptionsClick { get; set; }
// ... etc
}
}
ClickTracker
和ClicksLeftTracker
在实施方面非常相似,并且已正确实施IClickRecorder
界面。
当我将ClickTracker
作为参数传递给TrackerOptionsPage(ITrackerComponent)
时,它被识别为实现IClickRecorder
并且IsVisible设置为true。
但是,当我将ClicksLeftTracker
作为参数传递时,它被设置为false,就像它没有实现IClickRecorder
一样。
从开始到相关方法的全部流程是:
// GetAllTrackers() returns IEnumerable<ITrackerComponent>
var allTrackers = _dataSource.GetAllTrackers();
allTrackers.ToList().ForEach(AddItemToGrid);
private void AddItemToGrid(ITrackerComponent item) {
item.OnOptionsClick =
new Command(async () => await Navigation?.PushAsync(new TrackerOptionsPage(item, _dataSource)));
// ...
}
public TrackerOptionsPage(ITrackerComponent trackerToShow) {
ClickDatasSettings.IsVisible = trackerToShow is IClickRecorder;
// ...
}
这里发生了什么?
答案 0 :(得分:0)
我通过从我正在使用的Android模拟器手动卸载应用程序并再次从Xamarin工作室运行它来解决它。
似乎有一些旧的程序集在清理/重建时没有正确更新,它可能与我使用两台不同的计算机有关,一台有Xamarin Studio(OSX),另一台有Visual Studio (Windows)开发时。
Thes issue with assemblies not updating on rebuild which lead me to my conclusion was found here.