Связывание данных с сеткой LocationCollection - PullRequest
0 голосов
/ 28 июля 2011

У меня небольшая проблема с сеткой данных и коллекцией MapPolyLine-LocationCollection.на данный момент я создал сетку с двумя столбцами один для долготы и один для широты.Я установил ItemsSource таблицы данных для моей LocationCollection и привязал столбцы к соответствующим значениям местоположения, таким как ниже

var lonCol = new DataGridTextColumn {Header = "Longitude", Binding = new Binding (Longitude) {Mode = BindingMode.TwoWay}}

все это работает нормально, однако, я на самом деле хочу, чтобы сетка имела один столбец с целой координатой в качестве отображаемого значения, причина в том, что я могу захотеть отобразитьэлемент в другой системе координат (например, UTM), я думал, что мог бы сделать это, используя каким-то образом конвертер значений.Моя проблема в том, что я не вижу, как заставить мою сетку иметь один столбец, привязанный к элементам в моем LocationCollection, и отобразить его значение ToString (), и, во-вторых, как тогда я смогу преобразовать отображаемое значение на основе какого-либо флага.

Извините, если это не объяснено хорошо.

Вся помощь очень ценится

1 Ответ

0 голосов
/ 29 июля 2011

Можно использовать только один столбец в вашей DataGrid с помощью преобразователя значений

// If you don't specify a property path, Silverlight uses the entire object
// For two way binding make sure you bind it to an IList<LocationWrapper>
var theOneColumn = new DataGridTextColumn ( 
    Header = "Long + Lat",
    Binding = new Binding(){ 
        Mode = BindingMode.TwoWay,  
        Converter = new LongLatConverter()
    }
);


//Converter
public class LongLatConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var loc = value as LocationWrapper;
        return String.Format("Long: {0}, Lat: {0}", loc.Longitude, loc.Latitude);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //...
    }
}

//Wrapper class for Location so two way binding works
public class LocationWrapper
{
    //The actual location object
    public String Location( get; set;}      
    public LocationWrapper(Location loc)
    {
        this.Location = loc;
    }
}

Для преобразования, основанного на части флага, вы можете передать параметр Converter, чтобы изменить поведение преобразователя.

var theOneColumn = new DataGridTextColumn ( 
    Header = "Long + Lat",
    Binding = new Binding(){ 
        Mode = BindingMode.TwoWay,  
        Converter = new LongLatConverter(),
        ConverterParameter = "UTM" // This is what you want to set
    }
);

// ....
// In the Value Converter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    var loc = value as Location;

    if( (parameter as string).equals("UTM"))
    {
        //return UTM formated long/lat coordinates 
    }
    else
    {
        return String.Format("Long: {0}, Lat: {0}", loc.Longitude, loc.Latitude);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...