【发布时间】:2019-11-26 00:58:40
【问题描述】:
我有 2 个模型、2 个视图和 1 个视图模型。 基本上,我想将 GTSLocation 对象中的数据加载到 ListItem 中,但还要从具有与 GTSLocation 对象相同的工作站点 Guid 的 GTSWorkingSite 对象添加另外两个值。
来自 ObservableCollection
WorkingSiteId : "A-A-A-A"
Longitude: 60
Latitude: 120
来自 ObservableCollection
WorkingSiteId : null
Longitude: 70
Latitude: 130
来自 ObservableCollection
Id: "A-A-A-A"
Name: "WacDonald's"
Description: "A Fastfood resturaunt."
fooA 的列表项:
WorkingSiteName: "WacDonald's"
WorkingSiteDescription: "A Fastfood resturaunt."
Longitude: 60
Latitude: 120
fooB 的列表项:
WorkingSiteName: "Unknown Place"
WorkingSiteDescription: "No info to provide"
Longitude: 70
Latitude: 130
我只能想出一个解决方案,即创建另一个包含我想要的所有属性的模型。事实上,这是唯一的出路吗?我猜一定有更优雅的方式?
加起来,我有两个 ObservableCollection 的原因是因为 GTSWorkingSite 也单独用于另一个视图(WorkingSiteView.xaml)。
◎型号
public class GTSLocation
{
public string WorkingSiteId {get;set;} //GUID
public double Longitude {get;set;}
public double Latitude {get;set;}
public DateTime Timestamp {get;set;}
}
public class GTSWorkingSite
{
public string Id {get;set;} //GUID
public string Name {get;set;}
public string Description {get;set;}
}
◎视图模型
public class GeneralViewModel : INotifyPropertyChanged
{
//Assume these two collection filled with data
public ObservableCollection<GTSLocation> UserLocations { get; set; }
public ObservableCollection<GTSWorkingSite> WorkingSites { get; set; }
//Ignored the rest of the code...
}
◎查看:UserItemsPage.xaml
<ListView ItemsSource="{Binding UserLocations}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<Image Grid.Row="0" Grid.Column="0" Grid.RowSpan="3" />
<Label Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding WorkingSiteName}" />
<Label Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding WorkingSiteDescription}" />
<Label Grid.Row="2" Grid.Column="1" Text="{Binding Longitude}" />
<Label Grid.Row="2" Grid.Column="2" Text="{Timestamp}" HorizontalTextAlignment="End" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
如果这从一开始就是一个糟糕的设计,我愿意重构我的代码,如果有人可以给我建议。
【问题讨论】:
-
请原谅我没有立即选择最佳答案。每个答案对我都有帮助。请给我两天时间,因为我想看到更多的答案和建议。
标签: c# xaml xamarin mvvm data-binding