如何在代码隐藏中为 DataTemplate 子项设置 ValueConverter

How to set ValueConverter for DataTemplate child in code behind

我想访问我的 DataTemplate 中的特定控件,并从 CodeBehind.

中将其设置为 ValueConverter

ValueConverter 应该从使用 page/control.

传入

我的 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 How to access control from DataTemplate

但是没用

所以现在我的建议是我也可以在代码中这样做

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

但是没用...

可能是 ... Converter={StaticResource DateTimeToColorConverter}}" 并且不应将其指定为 StaticResource 因为它来自 CodeBehind

但是我试了很多组合都没用...

有什么建议吗?

以下对我有用:

<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() 之前添加资源。