Xamarin MvvM内容视图绑定

时间:2015-01-23 04:22:21

标签: c# xaml mvvm xamarin

我正在使用Xaramin开发应用程序。

在我的解决方案中,我创建了一个ContentView.xaml,作为自定义GUI控件。

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:test2;assembly=test2"
    x:Class="test2.MyView">

    <ContentView.BindingContext>
        <local:MyViewModel MyValue="1"/>
    </ContentView.BindingContext>

    <StackLayout>
        <Label HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" Text="{Binding MyValue}"/>
    </StackLayout>

</ContentView>

我为此ContentView创建了一个ViewModel类:

using System;
using System.ComponentModel;
using Xamarin.Forms;

namespace test2
{
    public class MyViewModel : INotifyPropertyChanged
    {
        int myValue;

        public MyViewModel()
        {
            Device.StartTimer (TimeSpan.FromSeconds (1), () => {

                this.MyValue++;
                return true;
            });
        }

        public int MyValue
        {
            set
            {
                if (! myValue.Equals(value)) {

                    myValue = value;
                    OnPropertyChanged ("myValue");
                }
            }
            get
            { 
                return myValue;
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null) {

                PropertyChanged (this, new PropertyChangedEventArgs (propertyName));
            }
        }
    }
}

我还创建了一个ContentPage.xaml,并在其中添加了我的自定义控件。

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:test2;assembly=test2"
    x:Class="test2.MyPage">

    <local:MyView />

</ContentPage>

我发现标签永远不会更新,为什么?

1 个答案:

答案 0 :(得分:0)

初看时你应该替换

OnPropertyChanged ("myValue");

OnPropertyChanged ("MyValue");

由于属性名称区分大小写