Доступ к привязанному значению TextProperty TextBlock в WPF - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть два TextBlock, TextProperty которого связан с двумя свойствами в классе.А именно, StackingText и StackingRate ... Я хочу, чтобы, если StackingRate был нулевым или пустым, для StackingText было задано нулевое или пустое значение, поскольку значение по умолчанию для StackingText - "Платится при".

<TextBlock Name="stackingText"
           Margin="270,215,0,0"
           Text="{Binding Path=StackingText}"
           HorizontalAlignment="Left"
           VerticalAlignment="Top"
           FontSize="14"
           Padding="5"/>
<TextBlock Name="stackingRate"
           Margin="270,215,0,0"
           Text="{Binding Path=StackingRate}"
           HorizontalAlignment="Left"
           VerticalAlignment="Top"
           FontSize="14"
           Padding="5"/>

На самом делеЯ печатаю эту страницу, поэтому не имеет смысла, что когда stackingRate пусто, stackingText имеет значение.

Ответы [ 3 ]

2 голосов
/ 06 февраля 2011

Вы можете использовать DataTrigger для stackingText TextBlock, где вы привязываете к Text для stackingRate `TextBlock ', а если значение равно" "(пустое или пустое), тогда вы также устанавливаете для текста значение" ".Это также оставит свойство StackingText без изменений из-за способа работы триггеров

<TextBlock Name="stackingText"
           Margin="270,215,0,0"
           HorizontalAlignment="Left"
           VerticalAlignment="Top"
           FontSize="14"
           Padding="5">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Text" Value="{Binding Path=StackingText}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=stackingRate, Path=Text}"
                             Value="">
                    <Setter Property="Text" Value=""/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
<TextBlock Name="stackingRate"
           Margin="270,215,0,0"
           Text="{Binding Path=StackingRate}"
           HorizontalAlignment="Left"
           VerticalAlignment="Top"
           FontSize="14"
           Padding="5"/>
1 голос
/ 06 февраля 2011

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

ОБНОВЛЕНИЕ:

Например, как это сделать, посмотрите на этот вопрос: Условный элемент в xamlв зависимости от содержания переплета

1 голос
/ 06 февраля 2011

Вы можете выполнить это в триггере, как указывает Мелик. Если бы вы использовали MVVM, вам даже не пришлось бы задавать этот вопрос.

Чем больше я работаю с WPF, тем яснее мне становится все проще, если вы просто реализуете модель представления. Да, это немного утомительно, когда всегда приходится писать подобные

public string StackingText
{
   get { return _Model.StackingText; }
}

снова и снова, просто чтобы поддержать представление. (Было бы неплохо, если бы в C # была небольшая синтаксическая конструкция, которая автоматически реализовывала методы получения и установки модели представления.) Но как только вы это сделаете, становится очевидным, как изменить его для внедрения логики:

public string StackingText
{
   get 
   { 
      return _Model.StackingRate == 0
         ? null
         : _Model.StackingText; 
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...