如何将ContentView绑定到属性?

问题描述 投票:0回答:2

我很难将ContentView绑定到C#Xamarin应用中的属性。

这就是我写作的方式:

protected override View MyView
{
    get
    {
        if (_myView == null)
        {
            _myView = new ContentView
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.StartAndExpand,
                Padding = new Thickness(0, 40),
                Content = new StackLayout(),
            };

            if (Vm.ItemCount > 0)
            {
                (_myView.Content as StackLayout).Children.Add(MyListview);
            }
            else
            {
                (_myView.Content as StackLayout).Children.Add(NothingExistsLabel);
            }
        }

        return _myView;
    }
}

现在Vm.ItemCount可以随时更改,但UI不会更新。

有没有办法将ContentView数据绑定到Vm.ItemCount,这样当ItemCount发生变化时,UI会自动更新?

谢谢。

c# xamarin mvvm data-binding binding
2个回答
1
投票

内容不是可绑定的属性。

您可以将方法连接到ItemCount设置器,以便在更新ItemCount时刷新UI。


0
投票

当您自己创建视图时,除非您通知发生更改,否则Xamarin引擎无法知道属性是否已更改。

你有2个解决方案:

你的模特

public class MyViewModel : BaseViewModel // From MVVM Helpers nuget
{
    private IEnumerable<int> count;
    public IEnumerable<int> Count
    {
        get { return count; }
        set { SetProperty(ref count, value); }
    }
}

你的观点

public class MyView : ContentView
{
    private MyViewModel Vm { get; set; }

    public MyView()
    {
        this.Vm = new MyViewModel();
        this.BindingContext = this.Vm;
    }

    public void DoSomething()
    {
        this.Vm.Count = 42;
    }
}

在Xaml中添加绑定

<Label Text = "{Binding Count}" />
© www.soinside.com 2019 - 2024. All rights reserved.