DataTrigger, где значение НЕ является нулевым?

text = Text(app, state='disabled', width=44, height=5)

До и после вставки измените состояние, иначе оно не будет обновлено

text.configure(state='normal')
text.insert('end', 'Some Text')
text.configure(state='disabled')
147
задан abatishchev 10 May 2012 в 12:41
поделиться

3 ответа

Я столкнулся с подобным ограничением с DataTriggers, и будет казаться, что можно только проверить на равенство. Самая близкая вещь я видел это, могла бы помочь Вам, техника для того, чтобы сделать другие типы сравнений кроме равенства.

Это сообщение в блоге описывает, как сделать сравнения, такие как LT, GT, и т.д. в DataTrigger.

Это ограничение DataTrigger может работаться вокруг в некоторой степени при помощи Преобразователя для массирования данных в специальное значение, которое можно тогда сравнить с, как предложено в ответе Robert Macnee.

36
ответ дан J c 10 May 2012 в 12:41
поделиться

Можно использовать IValueConverter для этого:

<TextBlock>
    <TextBlock.Resources>
        <conv:IsNullConverter x:Key="isNullConverter"/>
    </TextBlock.Resources>
    <TextBlock.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding SomeField, Converter={StaticResource isNullConverter}}" Value="False">
                    <Setter Property="TextBlock.Text" Value="It's NOT NULL Baby!"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

, Где IsNullConverter определяется в другом месте (и conv установлен сослаться на его пространство имен):

public class IsNullConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (value == null);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new InvalidOperationException("IsNullConverter can only be used OneWay.");
    }
}

А более общее решение состояло бы в том, чтобы реализовать IValueConverter, который проверяет на равенство с ConverterParameter, таким образом, можно проверить по чему-либо, и не просто пустому указателю.

140
ответ дан svick 10 May 2012 в 12:41
поделиться

Это - определенный обман, но я просто установил стиль по умолчанию и затем переопределил его с помощью DataTrigger, если значение является нулевым...

  <Style> 
      <!-- Highlight for Reviewed (Default) -->
      <Setter Property="Control.Background" Value="PaleGreen" /> 
      <Style.Triggers>
        <!-- Highlight for Not Reviewed -->
        <DataTrigger Binding="{Binding Path=REVIEWEDBY}" Value="{x:Null}">
          <Setter Property="Control.Background" Value="LightIndianRed" />
        </DataTrigger>
      </Style.Triggers>
  </Style>
134
ответ дан Jamaxack 10 May 2012 в 23:41
поделиться
Другие вопросы по тегам:

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