当前位置: 首页 > 知识库问答 >
问题:

.NET MAUI数据绑定和MVVM

李辉
2023-03-14

这似乎很简单,但我无法让它正常工作。最简单的MAUI应用程序,标签绑定到“CountDisplay”,按钮绑定到“IncreaseCount”。命令绑定起作用,标签绑定第一次读取其值,但从未刷新。我做错了什么?谢谢你的帮助。

MainPage.xaml

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MauiApp1.MainPage"
         BackgroundColor="{DynamicResource SecondaryColor}">

<ScrollView>
    <Grid RowSpacing="25" RowDefinitions="Auto,Auto,Auto,Auto,*"
          Padding="{OnPlatform iOS='30,60,30,30', Default='30'}">

         <Label 
            Text="{Binding CountDisplay}"
            Grid.Row="2"
            FontSize="18"
            FontAttributes="Bold"
            HorizontalOptions="Center" 
            />

        <Button 
            Text="Click me"
            FontAttributes="Bold"
            Grid.Row="3"
            SemanticProperties.Hint="Counts the number of times you click"
            Command="{Binding IncreaseCount}"
            HorizontalOptions="Center" />

    </Grid>
    
    
</ScrollView>

MainPageViewModel。反恐精英

public class MainPageViewModel:BindableObject   
{
    public MainPageViewModel()
    {
        IncreaseCount = new Command(OnIncrease);
    }
    public ICommand IncreaseCount { get; }

    int count = 0;
    string countDisplay = "Click Me()!";

    public string CountDisplay
    {
        get { return countDisplay; }

        set
        {
            if (value == countDisplay)
                return;

            countDisplay = value;
            OnPropertyChanged();
            
        }
    }

    void OnIncrease()
    {
        count++;
        countDisplay = $"Current count: {count}";
    }
}

共有1个答案

壤驷凯
2023-03-14

您正在设置私有变量(小写字母“c”)

void OnIncrease()
{
    count++;
    countDisplay = $"Current count: {count}";
}

相反,您需要设置public属性(大写字母"C"),否则不调用OnProperty tyChanged

void OnIncrease()
{
    count++;
    CountDisplay = $"Current count: {count}";
}

一种流行的惯例是用命名私有变量,这样两个名称就更难混淆(countDisplaycountDisplay

 类似资料:
  • if绑定 if绑定应用在页面元素中,并通过表达式判断是否为元素添加子元素的绑定。if绑定在功能上非常像visible绑定,但在实现上却有很大的不同。visible绑定是为元素添加css样式来控制元素是否显示,if绑定是控制元素的字元素,如果表达式为true,则为元素添加子元素,否则清空子元素。 示例代码: //.W片段 <label> <input type="checkbox" bind-c

  • enable绑定用来设置form中的元素是否可用,例如button、input、select等。当绑定的参数为true时元素可用。 示例代码: //.W片段 <p> <input type='checkbox' bind-checked="hasCellphone" /> I have a cellphone </p> <p> Your cellphone number: <input

  • 数据绑定 JXML 中的动态数据来自于该 Page 的 data字段。 简单绑定 数据绑定使用 Mustache 语法(双大括号)将变量包起来,可以作用于以下: 页面内容 <view> hello {{ name }} </view> Page({ data: { name: 'cortana' } }) 组件属性(需要在双引号之内) <view id="{{id}}"> </

  • attr绑定是用来为html元素绑定属性值的,这种绑定非常有用,例如我们需要想一个元素添加title属性,或者为img标签添加src属性。 示例代码: //.W片段 <a bind-attr="{ href: url, title: details }"> Report </a> //js片段 this.url=justep.Bind.observable("year-end.html"),

  • submit绑定只能用在form元素中,当form提交的时候被触发,并且默认阻止form的提交。因此我们通常在submit的处理函数中以ajax的方式提交form表单。 示例代码: //.W片段 <form bind-submit="doSomething"> ... form contents go here ... <button type="submit">Submit</butt

  • with绑定用来创建一个绑定上下文,在子元素内的所有绑定都在这个上下文中进行。 示例代码: //.W片段 <h1 bind-text="city"> </h1> <p bind-with="coords"> Latitude: <span bind-text="latitude"> </span>, Longitude: <span bind-text="longitude"> </span