XAML .Net MAUI:视图未从ViewModel绘制数据- Intellisense显示连接

tjjdgumg  于 2022-12-07  发布在  .NET
关注(0)|答案(1)|浏览(151)

我的VIEW拒绝从VIEWMODEL中提取数据。Visual Studio 2022 intellisense会填充连接,就好像存在连接一样,它编译得很好......但没有数据显示。我已经离开XAML好几年了,现在我正试图重新跳回来。
我试图让一个输入字段更新VIEWMODEL,然后更新标签以显示写入VIEWMODEL的文本。我不断地分析代码,试图在执行更复杂的绑定之前让任何东西都能工作,但现在我无法让VIEW连接到VIEWMODEL。
下面的XAML是非常精简的VIEW代码。

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:model="clr-namespace:MauiCalendar.Model"
         xmlns:viewmodel="clr-namespace:MauiCalendar.ViewModel"
         x:Class="MauiCalendar.View.DaySingleView"
         x:DataType="viewmodel:DaySingleViewModel"
         Title="{Binding Title}">

    <VerticalStackLayout>
        <Entry
            Text="{Binding Title}" />

        <Label 
            Text="{Binding Title}" />

        <Label
            Text="Test" />

        <Button
            Text="Load Days" />
    </VerticalStackLayout>
</ContentPage>

VIEWMODEL被称为“DaySingleViewModel”,位于ViewModel目录中。我有多个字段和方法,但我将它们剥离出来以保持问题简洁。

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Diagnostics;
using System.Diagnostics;
using System.ComponentModel;
using MauiCalendar.Model;
using MauiCalendar.Services;

namespace MauiCalendar.ViewModel
{
    [ObservableObject]
    public partial class DaySingleViewModel 
    {
        public DaySingleViewModel()
        { }

        [ObservableProperty]
        string title = "Starting Value";
    }
}

以上代码输出如下内容:

有没有更有经验的人愿意看看我做错了什么?

yjghlzjz

yjghlzjz1#

我测试了你的代码,你需要先添加BindingContext连接ViewViewModel。下面的代码片段供你参考。代码要简洁易懂。

检视:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiCalendar.View.DaySingleView">
    
    <VerticalStackLayout>

        <Entry Text="{Binding Title}" />

        <Label Text="{Binding Title}" />

        <Label Text="Test"/>

        <Button Text="Load Days"/>

    </VerticalStackLayout>
</ContentPage>

检视的程式码后置:

using MauiCalendar.ViewModel; 
namespace MauiCalendar.View;

public partial class DaySingleView : ContentPage
{
      public DaySingleView()
      {
        BindingContext = new DaySingleViewModel();
        InitializeComponent();
      }
}

视图模型:

using CommunityToolkit.Mvvm.ComponentModel; 

namespace MauiCalendar.ViewModel
{

    [ObservableObject]
    public partial class DaySingleViewModel
    {
        [ObservableProperty]
        string title = "Starting  Value";

        public DaySingleViewModel() { }
    }
}

起始页:

using MauiCalendar.View; 

namespace MauiCalendar;

public partial class App : Application
{
      public App()
      {
            InitializeComponent();

            MainPage = new DaySingleView();
      }
}

相关问题