【问题标题】:Xamarin Data Binding - issue showing data from custom class via ItemListXamarin 数据绑定 - 通过 ItemList 显示来自自定义类的数据的问题
【发布时间】:2021-09-15 06:27:45
【问题描述】:

我在模型中定义了以下类:

public class Equipment
{

    public Equipment(string resName, DateTime crTime, int quant)
    {
        ResourceName = resName;
        CreateTime = crTime;
        Quantity = quant;
    }

    public string ResourceName { get; set; }

    public DateTime CreateTime { get; set;  }

    public int Quantity { get; set; }


}

我使用了一个 viewModel,我将其定义为

class EquipementViewModel : ObservableObject
   {
       ObservableCollection<Equipment> equipRange = new ObservableCollection<Equipment>();
       public ObservableCollection<Equipment> EquipRange { get { return equipRange; }  }
       public EquipementViewModel()
         {
                     
           equipRange.Add(new Equipment("Komax01",DateTime.Now,1));
           equipRange.Add(new Equipment("Komax02", DateTime.Now, 1));
           equipRange.Add(new Equipment("Komax03", DateTime.Now, 1));
       }
}

最后是 View XAML

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             xmlns:viewmodels="clr-namespace:TestXamarin.ViewModels"
             x:Class="TestXamarin.Views.EquipementPage"
              Title="EQuip"
             x:DataType="viewmodels:EquipementViewModel">
    <ContentPage.BindingContext>
        <viewmodels:EquipementViewModel/>
    </ContentPage.BindingContext>
    <ListView ItemsSource="{Binding EquipRange}" BackgroundColor="Transparent">
         
        <ListView.ItemTemplate>
            <DataTemplate>

                <TextCell TextColor="black" Text="{Binding ResourceName}">
                    <TextCell.BindingContext>
                        <viewmodels:EquipementViewModel/>
                    </TextCell.BindingContext></TextCell>
            </DataTemplate>
        </ListView.ItemTemplate>
        
    </ListView>
  
</ContentPage> 

我希望 TextCell 显示 Equipment 类的 ResourceNasme,但 VIsual Studio 向我显示了一个错误,即 Member not found in the Data Context "Equipment View Model"。

我看了很多指南,我不认为我做错了什么。可能是什么问题?

【问题讨论】:

  • 您不需要为 TextCell 指定 BindingContext
  • @Jason 但是文本单元如何仅显示 ResourceName 而不是所有 3 个字段?
  • 我说要删除 BindingContext,而不是 {Binding ResourceName}。模板会自动继承正确的上下文,你不需要指定它
  • @Jason 很遗憾不能正常工作。我现在试过了,但我以前也试过

标签: xaml xamarin.forms mvvm data-binding


【解决方案1】:

您无需为TextCell 提供BindingContext。它将自动从ListView 继承正确的BindingContext

    <ListView.ItemTemplate>
        <DataTemplate>
            <TextCell TextColor="black" Text="{Binding ResourceName}">
                <TextCell.BindingContext>
                    <viewmodels:EquipementViewModel/>
                </TextCell.BindingContext></TextCell>
        </DataTemplate>
    </ListView.ItemTemplate>

只是这样做

    <ListView.ItemTemplate>
        <DataTemplate>
            <TextCell TextColor="black" Text="{Binding ResourceName}" />
        </DataTemplate>
    </ListView.ItemTemplate>

【讨论】:

  • 是的,那是我后来添加的。我之前试过没有它,它仍然很遗憾地显示错误。
  • 也尝试摆脱x:DataType
  • 现在可以了! :-) 哇,我不知道。我想我在我看过的一些教程中添加了这个。
猜你喜欢
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多