Использование стиля WPF для упрощения повторяющихся привязок MultiBinding

Я показываю результаты нескольких тестов. В каждом тесте есть 2 переменные, а текст и цвет отображаемых результатов зависят от обоих. У меня это работает, но происходит много повторяющихся привязок MultiBinding, и я хотел бы посмотреть, есть ли способ использовать стиль для упрощения XAML.

Вот упрощенный взгляд на то, как выглядит мой код:

//TestResults.cs excerpt
public class TestResults
{
    private Test1Result test1 = new Test1Result();
    public Test1Result Test1 { get { return test1; } }

    private Test2Result test2 = new Test2Result();
    public Test2Result Test2 { get { return test2; } }
}

//TestCtrl.xaml.cs excerpt
public class TestCtrl : UserControl
{
    private TestResults results = new TestResults();
    public TestResults Results { get { return results; } }
}
<!-- TestCtrl.xaml excerpt -->
<UserControl x:Class="Tester.TestCtrl" x:Name="TestResultsCtrl" ...>

<!-- lots of stuff -->

<TextBlock Grid.Row="6">
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource TestToTextConverter}" >
            <Binding Path="Results.Test1.Temperature" ElementName="TestResultsCtrl" />
            <Binding Path="Results.Test1.Time" ElementName="TestResultsCtrl" />
        </MultiBinding>
    </TextBlock.Text>
    <TextBlock.Foreground>
        <MultiBinding Converter="{StaticResource TestToBrushConverter}">
            <Binding Path="Results.Test1.Temperature" ElementName="TestResultsCtrl" />
            <Binding Path="Results.Test1.Time" ElementName="TestResultsCtrl" />
        </MultiBinding>
    </TextBlock.Foreground>
</TextBlock>

<TextBlock Grid.Row="7">
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource TestToTextConverter}" >
            <Binding Path="Results.Test2.Temperature" ElementName="TestResultsCtrl" />
            <Binding Path="Results.Test2.Time" ElementName="TestResultsCtrl" />
        </MultiBinding>
    </TextBlock.Text>
    <TextBlock.Foreground>
        <MultiBinding Converter="{StaticResource TestToBrushConverter}">
            <Binding Path="Results.Test2.Temperature" ElementName="TestResultsCtrl" />
            <Binding Path="Results.Test2.Time" ElementName="TestResultsCtrl" />
        </MultiBinding>
    </TextBlock.Foreground>
</TextBlock>

<!-- lots more repetitions here -->

Я хотел бы определить стиль, чтобы мне было легче применять MultiBindings к TextBlocks. Единственная разница в каждом из них заключается в том, какой тест я указываю в значениях Binding Path. Моя цель была бы примерно такой:

<Style x:Key="TestResultsStyle" TargetType="{x:Type TextBlock}">
    <!-- do binding stuff here -->
</Style>

<TextBlock Grid.Row="6" 
    Style="{StaticResource TestResultsStyle}" <!--set Test1 path here --> />
<TextBlock Grid.Row="7" 
    Style="{StaticResource TestResultsStyle}" <!--set Test2 path here --> />

Возможно ли что-нибудь подобное?

8
задан H.B. 20 May 2011 в 22:32
поделиться