Xamarin Forms Bind Array 元素在 listView 内

Posted

技术标签:

【中文标题】Xamarin Forms Bind Array 元素在 listView 内【英文标题】:Xamarin Forms Bind Array element inside listView 【发布时间】:2019-03-30 23:58:00 【问题描述】:

需要请你帮忙。 我目前正在使用 MVVM 开发 Xamarin Forms 解决方案,我现在处于一个新的境地。

我有一个列表视图,其中包含此类制作的项目

 public class City

    public int Key  get; set; 
    public string Value  get; set; 
    public List<string> Words get;  = new List<string>  "One", "Two", "Three" ;

我想要实现的是显示使用Key 指示的Words 列表元素创建的标签文本。像

Words[Key]

例子

 <ListView
        ItemsSource="Binding Cities">
        <ListView.ItemTemplate>
            <DataTemplate>
            <ViewCell>
                <StackLayout
                    HorizontalOptions="FillAndExpand"
                    VerticalOptions="StartAndExpand">

                    <Label Text="Binding Words[Key]"
                        FontSize="18"
                        TextColor="Black"
                        VerticalOptions="StartAndExpand" />        
                </StackLayout>

                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

标签文本绑定不起作用,但技术上是我需要实现的。例如,如果我使用Words[0],它将起作用并返回“One”

我的 ViewModel 非常简单。

 public class TestViewModel : INotifyPropertyChanged

    public ObservableCollection<City> Cities  get; set; 

    public TestViewModel()
    
        Cities = GetCities();
    

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string name = null)
    
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    

    public ObservableCollection<City> GetCities()
    
        return new ObservableCollection<City>
        
            new City Key = 1, Value = "Mumbai",
            new City Key = 2, Value = "New York",
            new City Key = 3, Value = "Milan",
            new City Key = 4, Value = "Rome"
        ;
    

我需要为索引创建一个属性吗?在我看来,问题在于我在一个列表中并且已经有一个索引可以使用。

感谢大家的帮助

【问题讨论】:

设置ItemsSource 将自动为您执行此操作。您不必专门将每个元素提供给 ViewCell。只需设置Text="Binding Value",它就会以与ObservableCollection 相同的顺序显示列表。还要在 ObservableCollection 的 set 方法上触发 OnPropertyChanged 可能使用支持字段 对不起,我犯了一个小错误。我想写 Values[Key] 因为我不想要 Value 属性,我想要的是显示一个 List 元素值。我更新了问题更改名称以便更好地理解 在这种情况下,您可以使用IValueConverter。看看,如果您仍有任何问题,请更新您的转换器实现 【参考方案1】:

你可以修改你的模型:

 public class City
    
        public int Key  get; set; 
        public string Value  get; set; 
        public List<string> Words  get;  = new List<string>  "One", "Two", "Three" ;

        public string myValue
        
            get
            
                return Words[Key];
            
            set 
        
    

在您的.xmal 中,只需设置Text="Binding myValue",它将显示单词的列表元素值。

【讨论】:

以上是关于Xamarin Forms Bind Array 元素在 listView 内的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms:Forms.Context 已过时

Xamarin.Forms 手势密码实现

Xamarin.Forms 和 Xamarin Native 有啥区别? [关闭]

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

Xamarin Forms Prism:prism ResourceDictionary 中已存在具有键“Xamarin.Forms.NavigationPage”的资源

Xamarin.Forms.Forms.Init(e) Onlaunched 中的 FileNotFoundExeception