내 데이터 개체에 바인딩 된 텍스트 상자가 있습니다. 유효성 검사가 실패하면 오류 메시지가 포함 된 팝업을 표시하고 싶습니다. XAML에서는 제대로 작동합니다. 나는 다음과 같은 XAML을 사용하고 있습니다 :코드에서 Popup.IsOpen에 바인딩하는 방법 Validation.HasError 코드에서
<TextBox Height="23" Margin="54,12,104,0" Name="textBox1"
VerticalAlignment="Top" Text="{Binding Value, ValidatesOnExceptions=True, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Popup Name="myPopup" PlacementTarget="{Binding ElementName=textBox1}"
IsOpen="{Binding ElementName=textBox1, Path=(Validation.HasError), Mode=OneWay}"
>
<TextBlock Name="myPopupText" Background="LightBlue" Foreground="Blue">
The value is invalid
</TextBlock>
</Popup>
내 문제는 내가 팝업 및 코드에서 바인딩을 생성하고 난 그것을 작동시킬 수 없다는 것입니다. 여러 가지 옵션을 시도했습니다. 나는 또한 바인드가 전혀 작동하는지 확인하기 위해 더미 변환기를 사용했다. 그것은 바인딩 (그것은 초기 값을 얻을) 만들 때 작동하지만 그 후에 아무것도 일어나지 않는 것 같습니다. Validation.HasError가 올바르게 업데이트되는지 (TextBox의 테두리가 빨간색으로 변함) 볼 수 있지만 그게 전부입니다. 내 더미 변환기가 호출되지 않습니다. 다음은 내가 사용하고있는 코드입니다 :
Popup popup = new Popup();
popup.Name = "somepopup";
// Source is the textbox which is bound to the data object
popup.PlacementTarget = source;
popup.Placement = PlacementMode.Bottom;
TextBlock txtblock = new TextBlock();
txtblock.Background = Brushes.LightBlue;
txtblock.Foreground = Brushes.Blue;
txtblock.Text = "this is the error message";
popup.Child = txtblock;
Binding is_open_binding = new Binding("(Validation.HasError)");
is_open_binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
is_open_binding.Source = source;
is_open_binding.Mode = BindingMode.OneWay;
is_open_binding.NotifyOnValidationError = true;
is_open_binding.ValidatesOnExceptions = true;
is_open_binding.Converter = new TempValueConverter();
popup.SetBinding(Popup.IsOpenProperty, is_open_binding);