gpt4 book ai didi

c# - 如何将属性绑定(bind)到 MAUI 中的 View 模型?

转载 作者:行者123 更新时间:2023-12-05 04:40:04 25 4
gpt4 key购买 nike

我正在尝试将属性绑定(bind)到 View 模型。

我收到以下错误:

Error XFC0009 No property, BindableProperty, or event found for "ViewModel", or mismatching type between value and property.

public abstract class BaseTestView : ContentView
{
public BaseVm ViewModel
{
get => (BaseVm)GetValue(ViewModelProperty);
set => SetValue(ViewModelProperty, BindingContext = value);
}
public static BindableProperty ViewModelProperty { get; set; } = BindableProperty.Create(nameof(ViewModel), typeof(BaseVm), typeof(BaseTestView));
}
<v:BaseTestView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:vm="clr-namespace:MyProject.ViewModels"
xmlns:v="clr-namespace:MyProject.Views"
x:Class="MyProject.Views.ChildTestView"
x:DataType="vm:ChildTestVm">
<v:BaseTestView.Content>
<StackLayout>
<Label Text="{Binding Foo}" />
</StackLayout>
</v:BaseTestView.Content>
</v:BaseTestView>




public partial class ChildTestView : BaseTestView
{
public ChildTestView() : base()
{
InitializeComponent();
}
}

public class ChildTestVm : BaseVm
{
public string Foo { get; set; }

public ChildTestVm()
{
Title = "Test";
Foo = "some stuff";
}
}

public class HomeVm : BaseVm
{
public ChildTestVm Tested { get; set; }
}
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:vm="clr-namespace:MyProject.ViewModels"
xmlns:v="clr-namespace:MyProject.Views"
x:Class="MyProject.Pages.HomePage"
x:DataType="HomeVm">
<ContentPage.Content>
<StackLayout>
<v:ChildTestView ViewModel="{Binding Tested}" />
<!-- ^ Error here /-->
</StackLayout>
</ContentPage.Content>
</ContentPage>




public partial class HomePage : ContentPage
{
}

知道此错误的含义以及如何修复它吗?

最佳答案

我尝试了一些实验,但未能弄清楚为什么会出现这种提示 - 我尝试的每个变体也出现了这种错误。


相反,这样做:

首先,设置ChildTestView的BindingContext:

<v:ChildTestView BindingContext="{Binding Tested}" />

将 ChildTestView 数据绑定(bind)到 Tested 的 ChildTestVm。

如果您还需要访问 Vm 以获取代码隐藏,请按以下方式进行:

ChildTestView.xaml.cs:

private ChildTestVm ViewModel => (ChildTestVm)BindingContext;

现在在 ChildTestView 的方法中,您可以使用 ViewModel.Foo


注意:如果您动态更改Tested:

如果您在主页加载并可见后任何地方都有执行 Tested = ... 的代码,那么让它工作需要 Tested setter 执行 OnPropertyChanged ();(或其他 MVVM 数据绑定(bind)机制)。这是通知 XAML 更改所必需的。

关于c# - 如何将属性绑定(bind)到 MAUI 中的 View 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70347196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com