Предотвращение дублирования в WPF (после DRY)

Правильно, поэтому, пройдя некоторое время назад, я понял, что происходит то, что я не определяю, что должно происходить после запятой. Я предположил, что это подразумевалось после первого ДОБАВИТЬ, но, видимо, это не так.

Для тех, кто застрял так же, как и я, проблема, по-видимому, была в следующем:

ALTER TABLE students 
ADD allergies VARCHAR(255),
ADD afterSchoolActivities VARCHAR(255);
5
задан DavidN 9 March 2009 в 20:20
поделиться

4 ответа

У меня нет альтернативного решения, но я не соглашаюсь относительно Вашего аргумента одноразовых средств управления. По-моему, это сводится к выбору между большим количеством дублирующего кода или меньшего количества дублирования со многим управлением, которые довольно конкретны. Если бы это было простым кодом, то Вы, вероятно, не думали бы дважды о выполнении метода извлечения, сталкиваясь с несколькими блоками идентичного кода, почему то, то, что этим кодом является теперь XAML, принимают Ваше решение, несколько отличающееся?

2
ответ дан 14 December 2019 в 09:01
поделиться

ControlTemplate мог бы работать:

<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type Button}">
<StackPanel Height="Auto" Width="Auto">
    <TextBlock Text="{TemplateBinding Content}" Foreground="Red"/>
    <TextBlock Text="{TemplateBinding Tag}" Foreground="Red"/>
</StackPanel></ControlTemplate>  

Я использовал TemplateBinding для получения двух изменяемых частей данных. Теперь, когда Вы создаете кнопку, применяете Шаблон и устанавливаете Привязку к Вашим элементам:

<Button x:Name="BuyButton"
    Margin="0,0,1,1"
    IsEnabled="{Binding CanBuy}"
    Template="{DynamicResource ButtonControlTemplate1}"
    Content="Button" 
    Tag="{Binding BuyPrice}"/>

Единственной вещью, отсутствующей, является DataContext: просто установите его в контейнере выше этих двух кнопок.

Я не попробовал его а именно, но кажется, что это должно работать. Я выбрал "Tag" выше, потому что мне был нужен второй элемент для Привязки. Я хотел бы видеть различные предложения об этом.

Вы, вероятно, также хотите повредить ForegroundColor = "Красный" материал типа в стиль.

3
ответ дан 14 December 2019 в 09:01
поделиться

Разделите его на пользовательский элемент управления. Принципы DRY и рефакторинг нужно рассматривать то же через примерно любую платформу.

0
ответ дан 14 December 2019 в 09:01
поделиться

Если Ваша цель состоит в том, чтобы только уменьшить повторение, можно устранить многое из него при помощи Стилей и установки общих приложенных свойств на родительском элементе:

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Margin" Value="0,0,1,1"/>
        </Style>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Foreground" Value="Red"/>
            <Setter Property="DataContext" Value="{Binding Product}"/>
        </Style>
    </StackPanel.Resources>
    <Button x:Name="BuyButton" IsEnabled="{Binding CanBuy}">
        <StackPanel>
            <TextBlock Text="BUY"/>
            <TextBlock Text="{Binding BuyPrice}"/>
        </StackPanel>
    </Button>
    <Button x:Name="SellButton" IsEnabled="{Binding CanSell}">
        <StackPanel>
            <TextBlock Text="SELL"/>
            <TextBlock Text="{Binding SellPrice}"/>
        </StackPanel>
    </Button>
</StackPanel>

Обратите внимание, что это заканчивает тем, что было большим количеством кода..., который является, почему "3 забастовки, затем осуществите рефакторинг", эмпирическое правило.

2
ответ дан 14 December 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: