【问题标题】:How to bind a ContentView to a property?如何将 ContentView 绑定到属性?
【发布时间】:2018-08-08 19:09:32
【问题描述】:

我很难将 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,这样 UI 会在 ItemCount 发生变化时自动更新?

谢谢。

【问题讨论】:

  • 内容不是可绑定的属性。您可以将一个方法连接到 ItemCount 设置器,以便在 ItemCount 更新时刷新您的 UI。
  • 正是我需要知道的。谢谢你的建议。只要你有机会,你能把它作为答案发给我检查吗?

标签: c# xamarin mvvm data-binding binding


【解决方案1】:

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

您有 2 个解决方案:

  • 在您的视图上实现接口 INotifyPropertyChanged,以便 Xamarin 可以绑定到您的事件“PropertyChanged”

  • (真的是我的最爱)使用 MVVM Helpers nuget https://github.com/jamesmontemagno/mvvm-helpers 来简化实现。例如:

你的模型

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}" />

【讨论】:

    【解决方案2】:

    内容不是可绑定的属性。

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

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 2020-11-28
      • 2021-04-27
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 2022-01-01
      相关资源
      最近更新 更多