C# 在XAML中应用值转换器而不进行数据绑定

C# 在XAML中应用值转换器而不进行数据绑定,c#,wpf,xaml,data-binding,valueconverter,C#,Wpf,Xaml,Data Binding,Valueconverter,我的视图中有一个文本块,我希望始终显示数字1,转换为当地货币。(例如,美国1美元,英国1英镑等)。我有一个值转换器可以做到这一点,但我不知道如何在不从数据绑定获取数据的情况下将值转换器应用于1的值 <Border> <Border.Background> <Binding Source="{x:Static enumeration:ColorType.Main}" Converter="{StaticResource

我的视图中有一个文本块,我希望始终显示数字1,转换为当地货币。(例如,美国1美元,英国1英镑等)。我有一个值转换器可以做到这一点,但我不知道如何在不从数据绑定获取数据的情况下将值转换器应用于1的值

<Border>
    <Border.Background>
        <Binding Source="{x:Static enumeration:ColorType.Main}"
            Converter="{StaticResource ColorConverter}" />
    </Border.Background>
</Border>
我可以想出两种解决方案,但它们都有各自的问题,我正在寻找更优雅的解决方案:

  • 在我的ViewModel上创建一个属性,该属性仅保留并返回值1并绑定到该值。然后将我的转换器添加到此绑定。这似乎是倒退,尤其是因为这是只查看代码

  • 创建一个现有属性的绑定点,并修改我的转换器以忽略给定给它的值,而使用参数为它指定数字1。这对其他程序员来说是不直观的,因为他们会对我为什么绑定到另一个属性感到困惑


  • 是否有一些方法可以在不首先创建绑定的情况下应用转换器?

    如果您希望仅从XAML中相对可读,您可以这样做:

    <Label>
       <Label.Resources>
          <system:Int32 x:Key="defaultValue">1</system:Int32>
       </Label.Resources>
       <Label.Content>
          <Binding Source="{StaticResource defaultValue}"
                Converter="{StaticResource CurrencyConverter}" />
       </Label.Content>
    </Label>
    
    
    1.
    
    如果您希望仅从XAML中相对可读,您可以这样做:

    <Label>
       <Label.Resources>
          <system:Int32 x:Key="defaultValue">1</system:Int32>
       </Label.Resources>
       <Label.Content>
          <Binding Source="{StaticResource defaultValue}"
                Converter="{StaticResource CurrencyConverter}" />
       </Label.Content>
    </Label>
    
    
    1.
    
    我也遇到过类似的情况,我需要将直接放在xaml中的静态枚举值转换为自定义转换器转换的值,而无需使用数据绑定

    <Border>
        <Border.Background>
            <Binding Source="{x:Static enumeration:ColorType.Main}"
                Converter="{StaticResource ColorConverter}" />
        </Border.Background>
    </Border>
    

    我也遇到过类似的情况,我需要将直接放在xaml中的静态枚举值转换为自定义转换器转换的值,而无需使用数据绑定

    <Border>
        <Border.Background>
            <Binding Source="{x:Static enumeration:ColorType.Main}"
                Converter="{StaticResource ColorConverter}" />
        </Border.Background>
    </Border>
    
    
    
    此外,无需使用转换器。只要写下
    StringFormat=“c”
    @amnezjak True就行了。无论如何,我自己都应该想到这一点。这应该是一个独立的答案。@NickUdell不,它不是,使用
    StringFormat
    您仍然需要提供标签的内容,它不会神奇地出现。我仍然同意amnezjak的解决方案更好,但它既不能治愈癌症,也不能修剪你的花园:PAlso,没有必要使用转换器。只要写下
    StringFormat=“c”
    @amnezjak True就行了。无论如何,我自己都应该想到这一点。这应该是一个独立的答案。@NickUdell不,它不是,使用
    StringFormat
    您仍然需要提供标签的内容,它不会神奇地出现。我仍然同意amnezjak的解决方案更好,但它既不能治愈癌症,也不能修剪你的花园:PWould
    {Binding Source=1,Converter={whatever}
    有效吗?我现在自己也不能太轻易地试一下。它确实管用!我只是在语法上犯了一个小错误。这可能是最简洁的答案,尽管我仍然更喜欢decPL,因为它可以减少一个神奇的数字?我现在自己也不能太轻易地试一下。它确实管用!我只是在语法上犯了一个小错误。这可能是最简洁的答案,尽管我仍然更喜欢decPL,因为它减少了一个神奇的数字。