如何将ContentView绑定到属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将ContentView绑定到属性?相关的知识,希望对你有一定的参考价值。

我很难将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会自动更新?

谢谢。

答案

内容不是可绑定的属性。

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

另一答案

当您自己创建视图时,除非您通知发生更改,否则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}" />

以上是关于如何将ContentView绑定到属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 View 类中的代码片段移动到 OnAppearing() 方法?

如何初始化片段中的绑定属性以使双向数据绑定工作

有没有更聪明的方法将布局绑定到片段?

如何正确获取 tableViewCell 的 contentView 绑定大小?

实用代码片段将json数据绑定到html元素 (转)

将命令传递给ContentView中的按钮