【问题标题】:Xamarin Forms Bind Array element inside listViewXamarin Forms Bind Array 元素在 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。看看,如果您仍有任何问题,请更新您的转换器实现

标签: xamarin mvvm xamarin.forms binding


【解决方案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}",它将显示单词的列表元素值。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2020-05-20
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2019-09-15
    • 1970-01-01
    相关资源
    最近更新 更多