Привязка к явной реализации индексатора интерфейса - PullRequest
0 голосов
/ 06 декабря 2018

Как я могу привязаться к явной реализации индексатора интерфейса?

Предположим, у нас есть два интерфейса

public interface ITestCaseInterface1
{
    string this[string index] { get; }
}

public interface ITestCaseInterface2
{
    string this[string index] { get; }
}

класс, реализующий оба

public class TestCaseClass : ITestCaseInterface1, ITestCaseInterface2
{
    string ITestCaseInterface1.this[string index] => $"{index}-Interface1";

    string ITestCaseInterface2.this[string index] => $"{index}-Interface2";
}

иDataTemplate

<DataTemplate DataType="{x:Type local:TestCaseClass}">
                <TextBlock Text="**BINDING**"></TextBlock>
</DataTemplate>

То, что я пробовал до сих пор без какого-либо успеха

<TextBlock Text="{Binding (local:ITestCaseInterface1[abc])}" />
<TextBlock Text="{Binding (local:ITestCaseInterface1)[abc]}" />
<TextBlock Text="{Binding (local:ITestCaseInterface1.Item[abc])}" />
<TextBlock Text="{Binding (local:ITestCaseInterface1.Item)[abc]}" />

Как должен выглядеть мой Binding?

Спасибо

1 Ответ

0 голосов
/ 06 декабря 2018

Вы не можете в XAML получить доступ к индексатору, который является явной реализацией интерфейса.

Вы можете написать для каждого интерфейса конвертер значений, использовать соответствующий конвертер в привязке и установить для ConverterParameter желаемый ключ:

public class Interface1Indexer : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (value as ITestCaseInterface1)[parameter as string];
    }

    public object ConvertBack(object value, Type targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException("one way converter");
    }
}

<TextBlock Text="{Binding Converter={StaticResource interface1Indexer}, ConverterParameter='abc'" />

И, конечно, связанные свойства должныбыть public, тогда как явная реализация имеет особое состояние.Этот вопрос может быть полезен: Почему явная реализация интерфейса не может быть публичной?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...