Как установить 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().