Xamarin表单的ContentView绑定不起作用

时间:2020-02-13 10:45:49

标签: c# xamarin.forms

我正在尝试从PageViewModel绑定属性,这是代码

使用MVVM交叉插件进行绑定。

PageViewModel

public class ScanPageViewModel : BasePageViewModel
    {
        private bool m_testing;


        public bool Testing
        {
            get => m_testing;
            set => Set(ref m_testing, value);
        }
    }

ContentView Xamal

<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:dxui="http://dips.xamarin.ui.com"
             xmlns:Resources="clr-namespace:Visit.Mobile.Common.Resources;assembly=Visit.Mobile.Common"
             xmlns:Shared="clr-namespace:Visit.Mobile.Views.Shared;assembly=Visit.Mobile"
             xmlns:Scan="clr-namespace:Visit.Mobile.Views.Scan;assembly=Visit.Mobile"
             xmlns:Appearance="clr-namespace:Visit.Mobile.Appearance;assembly=Visit.Mobile"
             xmlns:PageViewModels="clr-namespace:Visit.Mobile.Common.ViewModels.PageViewModels;assembly=Visit.Mobile.Common"
             mc:Ignorable="d"
             x:Class="Visit.Mobile.Views.Scan.ScanPage"
             x:Name="contentView">

<ContentView.BindingContext>
        <PageViewModels:ScanPageViewModel/>
    </ContentView.BindingContext>

    <Grid RowSpacing="0"
          ColumnSpacing="0">

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="285" />
            <RowDefinition Height="80" />
        </Grid.RowDefinitions>

<Label IsVisible="{Binding Testing}"
               Text="Testing"
               Grid.Row="1"
               VerticalOptions="CenterAndExpand"
               HorizontalOptions="CenterAndExpand" />

</Grid>
</ContentView>

我正在使用其他页面视图模型设置数据

第二页视图模型

m_ScanPageViewModel.Testing = true; `setting in constructor`

这不具有约束力。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

在使用MVVMCross时,您可以像...那样简单地更新属性。

private bool _myProperty;
public bool MyProperty
{
    get => _myProperty;
    set
    {
        _myProperty = value;
        RaisePropertyChanged(() => MyProperty);
        // take any additional actions here which are required when MyProperty is updated
    }
}

https://www.mvvmcross.com/documentation/fundamentals/data-binding

注意:-确保为所有 ViewModels

继承 MvxViewModel

https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle