【发布时间】: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