Привязка к словарю в Xamarin - PullRequest
       4

Привязка к словарю в Xamarin

0 голосов
/ 09 октября 2018

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

class Puzzle
{
     public string Name {get; set;}
     public string Id {get; set;}
     public PuzzleKind Kind {get; set;}
     public Dictionary<string, string> Details {get; set;}
}

Поле «Детали» отличается от моих разных головоломок.В представлении UI я использую DateTemplateSelector, чтобы выбрать, какой шаблон использовать тот или иной шаблон данных, в зависимости от PuzzleKind.Это работает как шарм.

Я связываюсь с Именем, Идентификатором и Видом, нет проблем.Моя проблема в том, как привязать к деталям ["ключ"] ??

Я знаю, какие подробности будут поступать в зависимости от вида головоломки, я создал шаблон данных, подобный этому:

<DataTemplate x:Key="myFirstTemplate">
    <ViewCell>
        <Grid ... with definitions...>
             <Label Text="{Binding Path=Details["expectedKey"],
                    Converter={StaticResource myConverter}}"/>
        </Grid>
    </ViewCell>
</DataTemplate>

Этот код просто выдает и необработанное исключение во время запуска ... МойВопрос в том, как привязать к этому, а также как изменить цвет шрифта в зависимости от входящего значения

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

В итоге я просто привязался к json и использовал параметр в конвертере, чтобы узнать, какие из ожидаемых параметров нужно будет использовать.Например:

<Label Text="{Binding Path=Details, Converter={StaticResource FirstClockConverter}, ConverterParameter=expectedKey}"/>

Затем в приведенном ниже коде я обрабатываю такую ​​вещь:

public class FirstClockConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {            
        return (value as Dictionary<string,string>)[parameter as string];
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Преимущество в том, что я могу настроить преобразование в зависимости от параметра (знаятип ожидаемого параметра или я могу даже проверить другие значения из статических свойств моей основной модели, чтобы показать правильную обратную связь на экране. Только с одним преобразователем для всех привязок.

0 голосов
/ 02 марта 2019

Подробности [Ожидаемый ключ] (без кавычек) работал для меня ...

0 голосов
/ 09 октября 2018

Если «ожидается, что ключ» жестко закодирован, то вы можете сделать это следующим образом:

<Label Text="{Binding Path=Details.[expectedKey]}" />

Синтаксис немного сложен, но не так уж плох.

Вы также можете повторитьчерез словарь следующим образом:

<ListView
    ItemsSource="{Binding Details}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextCell Text="{Binding Key}" Detail="{Binding Value}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...