私はWPFフォームデザイナーに取り組んでおり、Labels、TextBox、ComboBoxなどのコントロールをデザインサーフェスにドラッグアンドドロップしてから、プロパティグリッドを介してユーザーが各コントロールのデータバインディングを設定できます。特定のプロパティにバインディングが設定されていないコントロールには、赤い背景を表示する必要があります。
私の当初のアイデアは、呼び出し元の要素自体を取得して、特定のプロパティへのバインドがあるかどうかを調べるHasBindingConverterを作成することでした。この場合TextBox.TextProperty
public class HasBindingConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
FrameworkElement fe = value as FrameworkElement;
if(fe != null)
{
Binding binding = BindingOperations.GetBinding(fe, TextBox.TextProperty);
return binding != null;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
次に、TextBoxコントロールタイプに関連付けられたスタイルを、フォームのResourcesセクションに追加しました。これはUserControlです。
<UserControl.Resources>
<Style TargetType="TextBox">
<Style.Resources>
<Converters:HasBindingConverter x:Key="HasBindingConv"/>
</Style.Resources>
<Style.Triggers>
<DataTrigger
Binding="{Binding,
RelativeSource={RelativeSource Self},
Converter={StaticResource HasBindingConv}}"
Value="False">
<Setter Property="TextBox.Background" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding
RelativeSource={RelativeSource Self},
Converter={StaticResource HasBindingConv}}"
Value="True">
<Setter Property="TextBox.Background" Value="White" />
</Style.Triggers>
</Style>
したがって、TextBoxにTextBox.TextPropertyのデータバインディングが設定されていない場合は、背景が赤に設定されます。この部分は正常に機能します。問題は、ユーザーがこのコントロールのTextBox.TextPropertyバインディングを設定すると、Converterが再度呼び出されないため、背景が赤のままになることです。
このコントロールのバインディングを設定した後、トリガーを呼び出す方法を知っている人はいますか?または他の提案、私は間違った方法で問題に取り組んでいる可能性があります。
ありがとう!