c# - 更改 ItemsSource 后,Bing 地图未更新 GUI
问题描述
我正在使用MVVM和Bing 地图。
任务:在地图上绘制折线后(MapHandle.cs: List ViewFieldList),单击按钮(MapHandle.xaml: ButtonAddingField ),它通过FieldCollectionViewModel向模型添加新的折线。此外,Bing Maps 地图具有ItemsSource = "{Binding FieldList}"。
问题:更新模型后地图没有添加折线。
模型 - Field.cs
public class Field {
public LocationCollection LocList { get; set; }
public Field(MapPolyline polyline)
{
LocList = polyline.Locations;
}
}
ViewModel1 - FieldCollectionViewModel.cs
internal class FieldCollectionViewModel : BaseViewModel
{
#region Public Properties
public ObservableCollection<FieldViewModel> FieldList { get; set ; }
#endregion Public Properties
#region Constructor
public FieldCollectionViewModel()
{
FieldList = new ObservableCollection<FieldViewModel>();
}
public FieldCollectionViewModel(List<Field> fields)
{
FieldList = new ObservableCollection<FieldViewModel>(fields.Select(f => new FieldViewModel(f)));
}
private DelegateCommand<object> addFieldCommand;
public ICommand AddFieldCommand {
get {
if (addFieldCommand == null) addFieldCommand = new DelegateCommand<object>(AddNewField);
return addFieldCommand;
}
}
private void AddNewField(object parameter)
{
((List<MapPolyline>)parameter).ForEach(i =>
{
var ff = new Field(i);
FieldList.Add(new FieldViewModel(ff));
});
((List<MapPolyline>)parameter).Clear();
}
#endregion Constructor
ViewModel2 - FieldViewModel.cs
internal class FieldViewModel : BaseViewModel
{
#region Constructor
public FieldViewModel(Field field)
{
Field = field;
}
#endregion
#region Properties
public Field Field;
public LocationCollection LocList
{
get => Field.LocList;
set
{
Field.LocList = value;
OnPropertyChanged(nameof(LocList));
}
}
#endregion
}
BaseVewModel:PropertyChanged 功能
查看 - MapHandle.xaml
<m:Map
x:Name="myMap"
Mode="AerialWithLabels"
MouseMove="myMap_MouseMove"
MouseUp="myMap_MouseUp">
<m:MapItemsControl x:Name="MapItems" ItemsSource="{Binding FieldList}">
<m:MapItemsControl.ItemTemplate>
<DataTemplate>
<m:MapPolyline
Fill="Aqua"
Locations="{Binding LocList}"
Stroke="ForestGreen"
StrokeDashArray="2 2"
StrokeThickness="5" />
</DataTemplate>
</m:MapItemsControl.ItemTemplate>
</m:MapItemsControl>
</m:Map>
<Button
x:Name="ButtonAddingField"
Height="75"
HorizontalContentAlignment="Left"
Command="{Binding AddFieldCommand}"
CommandParameter="{Binding Path=ViewFieldList, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl}}" />
查看 - MapHandle.cs
public partial class MapHandle
{
public List<MapPolyline> ViewFieldList { get; set; } = new List<MapPolyline>();
public MapHandle()
{
InitializeComponent();
this.DataContext = new FieldCollectionViewModel();
...
}
}
但!如果我向 Map(在 UI 中)添加一些东西,例如,通过鼠标左键(myMap.Children.Add())进行 Pushpin,那么 Map 将从模型中提取所有内容。我该如何解决?
为什么会这样?
解决方案
推荐阅读
- php - PHP 运行 curl 命令
- java - Java 测试:当实例符合 GC 条件时如何运行自定义代码?
- python - 等值线图未显示
- python - 安装 Python 包的最旧版本的依赖项
- python - 如何使用 groupby 子句中包含的列创建数据框?
- mysql - 使用 mysqlQuery 重复某些值时未获得预期结果
- dictionary - 删除python中打印语句中的空格
- python - 将数值分组到类别中
- openssl - 在 CentOS linux 中创建 CA 时权限被拒绝
- android - Androidx fontscale 在华为 Mate20 上不起作用