Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <Window x:Class="WpfDataBindingProblem.Window1"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="Window1" Height="300" Width="300">
- <StackPanel Margin="5">
- <StackPanel Name="panel1" Visibility="Visible" Margin="5">
- <TextBox Name="DataBoundTextBox">
- <Binding Path="TextValue">
- <Binding.ValidationRules>
- <ExceptionValidationRule/>
- </Binding.ValidationRules>
- </Binding>
- </TextBox>
- </StackPanel>
- <StackPanel Name="panel2" Visibility="Collapsed" Margin="5">
- <TextBlock>
- The quick brown fox jumps over the lazy dog.
- </TextBlock>
- </StackPanel>
- <Button Click="Button_Click" Margin="5">
- Toggle panels
- </Button>
- </StackPanel>
- </Window>
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Linq;
- using System.Text;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace WpfDataBindingProblem {
- public partial class Window1 : Window {
- public Window1() {
- InitializeComponent();
- this.DataContext = new MyClass("default");
- }
- private void Button_Click(object sender, RoutedEventArgs e) {
- panel1.Visibility = panel1.Visibility == Visibility.Collapsed ?
- Visibility.Visible : Visibility.Collapsed;
- panel2.Visibility = panel2.Visibility == Visibility.Collapsed ?
- Visibility.Visible : Visibility.Collapsed;
- }
- }
- public class MyClass : INotifyPropertyChanged {
- private string mTextValue;
- public MyClass(string defaultText) {
- TextValue = defaultText;
- }
- public string TextValue {
- get {
- return mTextValue;
- }
- set {
- mTextValue = value;
- if (string.IsNullOrEmpty(mTextValue)) {
- throw new ApplicationException("Text value cannot be empty");
- }
- OnPropertyChanged(new PropertyChangedEventArgs("TextValue"));
- }
- }
- public event PropertyChangedEventHandler PropertyChanged;
- protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) {
- if (this.PropertyChanged != null) {
- this.PropertyChanged(this, e);
- }
- }
- }
- }
- <Setter Property="Validation.ErrorTemplate">
- <Setter.Value>
- <ControlTemplate>
- <ControlTemplate.Resources>
- <BooleanToVisibilityConverter x:Key="converter" />
- </ControlTemplate.Resources>
- <DockPanel LastChildFill="True">
- <Border
- BorderThickness="1"
- BorderBrush="Red"
- Visibility="{Binding ElementName=placeholder, Mode=OneWay, Path=AdornedElement.IsVisible, Converter={StaticResource converter}}">
- <AdornedElementPlaceholder x:Name="placeholder" />
- </Border>
- </DockPanel>
- </ControlTemplate>
- </Setter.Value>
- </Setter>
- private void Button_Click(object sender, RoutedEventArgs e) {
- if (panel1.Visibility == Visibility.Collapsed) {
- panel1.Visibility = Visibility.Visible;
- DataBoundTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
- panel2.Visibility = Visibility.Collapsed;
- }
- else {
- panel1.Visibility = Visibility.Collapsed;
- DataBoundTextBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
- panel2.Visibility = Visibility.Visible;
- }
- }
Add Comment
Please, Sign In to add comment