代码之家  ›  专栏  ›  技术社区  ›  James Cadd

参数化ControlTemplate中使用的ValueConverter的好方法是什么?

  •  0
  • James Cadd  · 技术社区  · 15 年前

    我正在处理的模板化控件使用这样的ValueConverter:

    <ListBox>
       <ListBox.Resources>
          <Controls:CodeDescriptionValueConverter x:Key="CodeDescriptionValueConverter"/>
       </ListBox.Resources>
       <ListBox.ItemTemplate>
          <DataTemplate>
             <TextBlock Text="{Binding Converter={StaticResource CodeDescriptionValueConverter}"/>
          </DataTemplate>
       </ListBox.ItemTemplate>
    </ListBox>
    

    这是我在generic.xaml中提供的默认外观。使用此控件时,我希望将不同的格式字符串传递到转换器中。有没有一种方法可以在不提供完全控制模板的情况下实现这一点?

    我的第一个想法是,我可以将ConverterParameter与TemplateBinding一起使用到控件上的属性,但我发现ConverterParameter无法绑定到。另一个选项可以是从convertto方法获取对控件的访问权,然后选择该属性。我不知道该怎么做。任何可以消除每次使用该控件时完全重新模板化该控件的需要的选项都会很有帮助(它有很多XAML)。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Jacob Adams    15 年前

    在这种情况下,我通常会做两件事之一:

    1)绑定到可以访问要绑定到格式字符串的两个属性的对象。在转换器中,您可以同时访问属性和格式字符串。

    2)为格式化字符串和格式化文本向数据对象/viewmodel/etc添加属性。然后绑定到格式化文本属性。假设您使用的是inotifyPropertyChanged,请记住,每当您更改文本或格式字符串属性时,都需要激发格式化文本属性的propertyChanged事件。