c# - 如何在 Silverlight XAML 中引用另一个命名空间中的绑定(bind)转换器?

标签 c# silverlight xaml datatemplate markup

由于您显然无法在 C# 中创建 Silverlight DataTemplate,因此我尝试在 XAML 中创建一个。我有一个需要引用的转换器,我已经在 C# 中的另一个命名空间中定义了它。我试过这样做:

<UserControl.Resources>
        <DataTemplate x:Key="PriceTemplate">
            <TextBlock Text="{Binding Price, Converter={Converters:PriceConverter}}" />
        </DataTemplate>
    </UserControl.Resources>

其中 Converters 是指向正确命名空间的 xmlns。但是,我收到一个编译错误:

Type 'Converters:PriceConverter' is used like a markup extension but does not derive from MarkupExtension.

我尝试将 System.Windows.Markup.MarkupExtension 作为父项添加到我的转换器中,但它显然不存在于 Silverlight 中。

如何在 XAML 中引用我的转换器,而不必在 XAML 中重写它?

最佳答案

你想先做一个静态资源,然后绑定(bind)到静态资源的转换器。

 <UserControl.Resources> 
   <conv:IntConverter x:Key="IntConverter"></conv:IntConverter> 
 </UserControl.Resources> 
 <StackPanel> 
    <TextBlock x:Name="Result" Margin="15" FontSize="20" 
              HorizontalAlignment="Center" VerticalAlignment="Center" 
               Text="{Binding Converter={StaticResource IntConverter}}"> 
    </TextBlock> 
 </StackPanel> 
</Window>

所以“conv:”xml 命名空间被注册在文档的顶部,就像您使用自定义控件一样:

xmlns:conv="clr-namespace:MyFooCompany.Converters"

此示例改编自以下关于 WPF 相同问题的链接教程:

http://www.dev102.com/2008/07/17/wpf-binding-converter-best-practices/

关于c# - 如何在 Silverlight XAML 中引用另一个命名空间中的绑定(bind)转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2860606/

相关文章:

.net - MVVM 绑定(bind)网格到不同类型的实体集(从组合框中选择)

wpf - 使用 DataTemplate 将 View 连接到 ViewModel

c# - 如何在 WPF/XAML 中绑定(bind)背景颜色?

c# - 通过 SqlConnection/SqlCeConnection 连接到 .sdf 数据库时出现问题

c# - 在 UWP 中加速编译?

silverlight - 如何在 Mvvm Light 中使用 ViewModelLocator

c# - 在 Silverlight 4 中保存用户登录

c# - 相同的绑定(bind)适用于 1 个 XAML 项目,但对另一个无效

c# - 指定的转换无效 C# Entity Framework

c# - 具有 lambda 表达式的泛型