我正在使用 Xaml 为 UI 处理 Xamarin 表单项目的数据绑定(bind)。
到目前为止它非常简单:
XAML:
<?xml version="1.0" encoding="utf-8" ?>
xmlns:viewModels="clr-namespace:Watson.ViewModels;assembly=Watson"
x:Class="Watson.Views.DeviceCheck">
<ContentPage.BindingContext>
<viewModels:DeviceCheckViewModel/>
</ContentPage.BindingContext>
<!--<ActivityIndicator Color="Red" IsRunning="True"
x:Name="loadingScreen"/>-->
<StackLayout>
<Label Text="Checking Device.."/>
<Button Text="page nav"
Command="{Binding NextButton}"></Button>
</StackLayout>
背后的代码:
namespace Watson.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class DeviceCheck:ContentPage
{
private DeviceCheckViewModel viewModel;
public DeviceCheck() {
InitializeComponent();
BindingContext = viewModel = new DeviceCheckViewModel(this.Navigation);
}// end of constructor
}// end of class
}// end of namespace
这是尝试绑定(bind)到 View 模型并使用绑定(bind)命令在单击按钮时转到另一个页面。
我得到的错误是“字典中不存在给定的键”,这是在尝试构建时。我已将问题隔离到该行:
<viewModels:DeviceCheckViewModel/>
我不知道为什么会发生此错误。
这是 View 模型:
namespace Watson.ViewModels
{
public class DeviceCheckViewModel: INotifyPropertyChanged
{
public INavigation Navigation { get; set; }
public ICommand NextButton { protected set; get; }
public DeviceCheckViewModel(INavigation navigation)
{
this.Navigation = navigation;
this.NextButton = new Command(async () => await GotoNextPage());
}
public async Task GotoNextPage()
{
await Navigation.PushAsync(new RegisterDevice());
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this,
new PropertyChangedEventArgs(propertyName));
}
}
}
我走这条路的原因是坚持MVVM架构。
所以将页面导航放在后面的代码中并不是一个真正的选择。
另外请注意,所有模型、 View 模型和 View 都位于具有相同名称的文件夹结构中。
任何帮助,将不胜感激。
最佳答案
您在后面的代码中设置绑定(bind)上下文:
BindingContext = viewModel = new DeviceCheckViewModel(this.Navigation);
所以也没有必要采用 xaml 方式。这也创建了一个
DeviceCheckViewModel
实例并将其设置为绑定(bind)上下文:<ContentPage.BindingContext>
<viewModels:DeviceCheckViewModel/>
</ContentPage.BindingContext>
但是 ,因此它需要有一个无参数的构造函数。这可能是您获得异常的原因。
关于c# - 字典 Xamarin 表单中不存在给定键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44308294/