Binding 如何简化将同一转换器分配给多个绑定(windows应用商店应用)?

Binding 如何简化将同一转换器分配给多个绑定(windows应用商店应用)?,binding,winrt-xaml,windows-store-apps,Binding,Winrt Xaml,Windows Store Apps,“Converter”属性在绑定上,而不是在TextBlock上,因此我不能在TextBlock上使用样式 每个绑定都是不同的,因此我无法创建单个绑定资源 那么,如何避免设置相同的转换器3次 编辑:我会再多解释一点。我要寻找的是一种给绑定对象一个默认转换器的方法,这样我就不必在使用同一转换器创建多个绑定时反复设置同一个转换器 所以,如果我能写一些像: <TextBlock Visibility="{Binding IsTrue1, Converter={StaticResource Boo

“Converter”属性在绑定上,而不是在TextBlock上,因此我不能在TextBlock上使用样式

每个绑定都是不同的,因此我无法创建单个绑定资源

那么,如何避免设置相同的转换器3次

编辑:我会再多解释一点。我要寻找的是一种给绑定对象一个默认转换器的方法,这样我就不必在使用同一转换器创建多个绑定时反复设置同一个转换器

所以,如果我能写一些像:

<TextBlock Visibility="{Binding IsTrue1, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBlock Visibility="{Binding IsTrue2, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBlock Visibility="{Binding IsTrue3, Converter={StaticResource BooleanToVisibilityConverter}}"/>

...
显然,这是不正确的,只是为了说明我的想法


希望这次我解释得足够清楚。

让我们谈谈你问题中的两个问题

1。单一资源

您似乎误解了转换器中的
StaticResource
定义。 例如,您编码的
BooleanToVisibility
不是复制对象的三倍。它只声明了一次,使用了三次

让我们再举一个例子,如果您的代码如下所示

<Grid DefaultBindingConverter="{StaticResource BooleanToVisibilityConverter}">
    <TextBlock Visibility="{Binding IsTrue1}"/>
    <TextBlock Visibility="{Binding IsTrue2}"/>
    <TextBlock Visibility="{Binding IsTrue3}"/>
    ...
您声明了一次
i
,并使用了三次。同样,您使用的StaticResource的工作原理也类似。您可以在
标记中声明
x:Key=“BooleanToVisibility”
,就是这样

2。风格用法

若要在TextBlock中设置样式,可以使用以下方法

int i;
i=1;
i=2;
i=3;

希望这有助于减少你的家务。

你的问题很难理解。可以在TextBlock中使用样式。而且,我很难理解“单一绑定资源”代表什么。如果在TextBlock上创建样式,就不能设置Converter属性,因为它是binding类的属性。您也不能设置可见性,因为每个绑定都有不同的路径。“单个绑定资源”只是指创建一个绑定对象作为静态资源,但由于绑定路径不同,我必须创建3个绑定对象,而不是“单个”绑定对象,这与创建可重用资源的目的背道而驰您没有仔细阅读我的问题或我的评论,我说的是单个绑定对象作为一种资源,而不是转换器资源。感谢您的回复,但使用MVVM,我也在尝试避免任何代码落后。因此,我想我会接受这一点,并希望XAML团队能够在将来提出更好的语法future@NanLi//是的,有一段时间我严格按照MVVM方法制作我的应用程序,但最近几天win rt增加了代码隐藏工作。
<TextBlock Visibility="{Binding Number1, Converter={StaticResource BooleanToVisibilityConverter}}">
    <TextBlock.Style>
        <Style>
            <!-- Define your Styles here -->                
        </Style>
    </TextBlock.Style>
<TextBlock>
for(int i=0;i<3;i++){
    var textbox = (TextBox)this.FindName("TextBox" + i);
    var binding = new Binding("IsTrue" + i);
    binding.Converter = new YourDefaultConverter();
    textbox.SetBinding(TextBox.TextProperty, binding);
}