Карты WPF bing управляют полилиниями/полигонами, которые не рисуются при первом добавлении в коллекцию

Я работаю над проектом поверхности, где у нас есть элемент управления bing maps и где мы хотели бы рисовать полилинии на карте с помощью привязки данных.

Странное поведение заключается в том, что когда я нажимаю кнопку «Добавить», на карте ничего не происходит. Если я немного сдвину карту, на карте будет нарисована полилиния. Другой сценарий, который работает, - это один раз нажать кнопку добавления, ничего не происходит, щелкнуть ее еще раз, обе полилинии нарисованы. (В моей ручной коллекции у меня есть 4 LocationCollections), поэтому то же самое происходит для третьего щелчка и четвертого щелчка, когда снова рисуются обе линии.

Я совершенно не знаю, где искать, чтобы исправить это. Я пытался подписаться на события Layoutupdated, которые происходят в обоих случаях.Также добавлено событие collectionchanged в наблюдаемую коллекцию, чтобы увидеть, срабатывает ли добавление, и да, оно срабатывает. Еще одна вещь, которую я пробовал, - это изменить полилинию на канцелярскую кнопку и взять первое местоположение из набора местоположений в модели представления конвейера, чем ожидалось.

Я загрузил образец проекта, если вы хотите сами увидеть, что происходит.

Очень надеюсь, что кто-нибудь укажет мне правильное направление, потому что я больше ничего не понимаю.

Ниже вы найдете код, который я написал:

У меня есть следующие модели представления:

MainViewModel

public class MainViewModel
{
    private ObservableCollection _pipelines;

    public ObservableCollection Pipes
    {
        get { return _pipelines; }
    }

    public MainViewModel()
    {
        _pipelines = new ObservableCollection();
    }
}

И PipelineViewModel, в которой есть коллекция Locations, которая реализует INotifyPropertyChanged:

PipelineViewModel

public class PipelineViewModel : ViewModelBase
{
    private LocationCollection _locations;

    public string Geometry { get; set; }
    public string Label { get; set; }
    public LocationCollection Locations
    {
        get { return _locations; }
        set
        {
            _locations = value;
            RaisePropertyChanged("Locations");
        }
    }
}

My XAML выглядит следующим образом:


    
        
            
        
    
  
        
            
        
        
    

И в нашем отделенном коде мы настраиваем привязку и событие щелчка следующим образом:

private int _counter = 0;
private string[] geoLines;

private MainViewModel _mainViewModel = new MainViewModel();

/// 
/// Default constructor.
/// 
public SurfaceWindow1()
{
    InitializeComponent();

    // Add handlers for window availability events
    AddWindowAvailabilityHandlers();

    this.DataContext = _mainViewModel;

    geoLines = new string[4]{ "52.588032,5.979309; 52.491143,6.020508; 52.397391,5.929871; 52.269838,5.957336; 52.224435,5.696411; 52.071065,5.740356",
                                "52.539614,4.902649; 52.429222,4.801025; 52.308479,4.86145; 52.246301,4.669189; 52.217704,4.836731; 52.313516,5.048218",
                                "51.840869,4.394531; 51.8731,4.866943; 51.99841,5.122375; 52.178985,5.438232; 51.8731,5.701904; 52.071065,6.421509",
                                "51.633362,4.111633; 51.923943,6.193542; 52.561325,5.28717; 52.561325,6.25946; 51.524125,5.427246; 51.937492,5.28717" };
}

private void add_Click(object sender, RoutedEventArgs e)
{
    PipelineViewModel plv = new PipelineViewModel();
    plv.Locations = AddLinestring(geoLines[_counter]);
    plv.Geometry = geoLines[_counter];

    _mainViewModel.Pipes.Add(plv);

    _counter++;
}

private LocationCollection AddLinestring(string shapegeo)
{
    LocationCollection shapeCollection = new LocationCollection();

    string[] lines = Regex.Split(shapegeo, ";");
    foreach (string line in lines)
    {
        string[] pts = Regex.Split(line, ",");

        double lon = double.Parse(pts[1], new CultureInfo("en-GB"));
        double lat = double.Parse(pts[0], new CultureInfo("en-GB"));
        shapeCollection.Add(new Location(lat, lon));
    }

    return shapeCollection;
}

14
задан Fredrik Hedblad 17 June 2012 в 10:14
поделиться