datatriggers繰り返し使用:WPF私は現在DataTrigger持っ
<DataTrigger Binding="{Binding HeaderType}" Value="1">
<Setter Property="BorderThickness" Value="5"/></DataTrigger>
私は2-100
は、私がデータトリガー99回をコピーする必要がまたは多分ありますない値と同じことをやってみたいですもっといい方法 ?
datatriggers繰り返し使用:WPF私は現在DataTrigger持っ
<DataTrigger Binding="{Binding HeaderType}" Value="1">
<Setter Property="BorderThickness" Value="5"/></DataTrigger>
私は2-100
は、私がデータトリガー99回をコピーする必要がまたは多分ありますない値と同じことをやってみたいですもっといい方法 ?
をtrueまたはfalseを返す:
public bool HasImportantHeader // or something...
{
get { return HeaderType >=1 && HeaderType <= 100; }
}
使用することをデータトリガーのプロパティ:
<DataTrigger Binding="{Binding HasImportantHeader}" Value="True">
<Setter Property="BorderThickness" Value="5"/>
</DataTrigger>
一般的に、私はXAMLをできるだけシンプルに保ち、すべてのロジックをビューモデルに入れて、コンバータが絶対に必要でない限り使用しないようにします。
のはあなたがヘッダータイプがジャスト再利用HasImportantHeader
プロパティ1〜100であることを示すために太字を使用する別のビュー、のようなものを追加しましょう:あなた、
<DataTrigger Binding="{Binding HasImportantHeader}" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</DataTrigger>
をまでのすべてのヘッダータイプに太い枠線と太字のテキストを含める必要があると判断することがあります。 HasImportantHeader
プロパティの実装を変更するのは簡単なことです。
この目的のためにコンバーターを使用する必要があります。DataTriggerにコンバーターを追加することができます。 Converterを使用すると、値を渡してtrueまたはfalseを返すことができます。
<DataTrigger
Binding="{Binding HeaderType, Converter={StaticResource RengeConvertor}}"
Value="true"
>
<Setter Property="BorderThickness" Value="5" />
</DataTrigger>
とあなたのコンバータが
public class RengeConvertor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int data = (int)value;
if (data >= 2 && data <= 100)
return true;
else
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
ようになるはずですまた、私は「この興味深いhttp://zamjad.wordpress.com/2010/07/29/range-converter/
を見つけることができますあなたのビューモデルにプロパティを追加
<DataTrigger Binding="{Binding HeaderType,
Converter={StaticResource RangeConverter},
ConverterParameter=1-100}"
Value="True">
<Setter Property="BorderThickness" Value="5"/>
</DataTrigger>
似たような状況
でこれを使用しましコンバータでは、我々は範囲に応じて、public class RangeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string[] ranges = parameter.ToString().Split(new char[]{'-'});
int headerType = (int)value;
if (headerType >= System.Convert.ToInt32(ranges[0]) &&
headerType <= System.Convert.ToInt32(ranges[1]))
{
return true;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
良い解決策。 「範囲内の値ですか?」状態です。表示は物事を視覚化するためのものであり、状態を保持するものではありません。 – rooks