Как установить ValueConverter для потомка DataTemplate в коде позади

Я хочу получить доступ к определенному элементу управления внутри моего DataTemplate и установить это ValueConverter из CodeBehind.

ValueConverter должны быть переданы с использованием страницы / элемента управления.

Моя MainPage использует UserControls из другого проекта, потому что они должны использоваться в большинстве моих приложений.

UserControl выглядит так:

<Grid>
    <ListView Name="SampleListView">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Name="SampleGrid">
                    <TextBlock Name="SampleTextBox" Text="{Binding BindingProperty}" />
                    <TextBlock Name="TextBoxIWantToAccess" Foreground="{Binding SampleDateTime, Converter={StaticResource DateTimeToColorConverter}}"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

Таким образом, мое предложение было сначала получить доступ к нему из кода позади, но это не сработало...

Я пробовал это: привязка (конвертер) в коде позади

в сочетании с этим: WPF Как получить доступ к управлению из DataTemplate

но это не сработало

Так что теперь я предлагаю, чтобы я мог сделать это так в коде

public MyUserControl1(IValueConverter converter)
    {
        this.InitializeComponent();
        this.Resources.Add("DateTimeToColorConverter", converter);
    }

Но это не сработало...

Может быть это ... Converter={StaticResource DateTimeToColorConverter}}" и он не должен быть указан как StaticResource, потому что он из CodeBehind

Но я перепробовал много комбинаций, и это не сработало...

Какие-либо предложения?

1 ответ

Решение

Следующие работы для меня:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <ListView>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}"
                               Foreground="{Binding Converter={StaticResource MyConverter}}" />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>

В коде позади:

public MyUserControl1()
{
    this.Resources["MyConverter"] = new FooConverter();
    this.InitializeComponent();            
}

Обратите внимание, что я добавляю ресурс перед вызовом InitializeComponent().

Другие вопросы по тегам