Data Binding, validation- Luento 12

Tutustutaan WPF:n tapaan validoida syötteitä

Luentoesimerkki (luento12.zip)

ExceptionValidationRule

Suoraan WPF:ssä toimii ExceptionValidationRule eli syötteen aiheuttaessa poikkeuksen esitetään kenttä virheellisenä punaisella reunuksella. Toiminnan edellytyksenä on, että TextBox on bindattu johonkin dependency propertyyn. Jos kenttään syötetään tietoa jota property ei osaa tulkita saadaan aikaiseksi poikkeus. Esim. int-tyyppiseen propertyyn yritetään syöttää tekstiä.

        <TextBox Height="23" HorizontalAlignment="Left" Margin="0,00,0,0" Name="textBox2" VerticalAlignment="Top" Width="120">
            <TextBox.Text>
                <Binding ElementName="ikkuna" Mode="OneWay" Path="Laskuri" UpdateSourceTrigger="PropertyChanged">
                    <Binding.ValidationRules>
                        <ExceptionValidationRule />
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>

Omat validointisäännöt

Voidaan käyttää myös omia validointisääntöjä joita voi olla yksi tai useampia. Kaikki säännöt käydään läpi ja jos kaikki menevät virheettä läpi niin syöte on ok.

         <TextBox Height="23" HorizontalAlignment="Left" Margin="00,0,0,0" Name="textBox1" VerticalAlignment="Top" Width="120">
                <TextBox.Text>
                    <Binding ElementName="ikkuna" Path="Laskuri" Mode="OneWayToSource" UpdateSourceTrigger="PropertyChanged">
                        <Binding.ValidationRules>
                            <c:PositiveNumberRule />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
        </TextBox>

Omat validointisäännöt täytyy kirjoittaa luokaksi, joka peritään ValidationRule-luokasta:

    class PositiveNumberRule : ValidationRule
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            int luku = 0;
            try
            {
                luku = Convert.ToInt16(value); ;
            }
            catch (FormatException)
            {
                return new ValidationResult(false, "Value is not a valid integer.");
            }
            if (luku <= 0)
            {
                return new ValidationResult(false, "Please enter a positive integer.");
            }
            else
            {
                return ValidationResult.ValidResult;
            }
        }
    }

Virheilmoitustekstien näyttämiseen tarvitaan tyylejä ja triggereitä joita käsitellään myöhemmin

Binding

Luodaan dynaamisesti TextBox ja bindataan se Laskuri-nimiseen dependency propertyyn.

           TextBox malliTextBox = new TextBox();

            malliTextBox.Width = 100;
            malliTextBox.Height = 30;
            malliTextBox.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
            malliTextBox.VerticalAlignment = System.Windows.VerticalAlignment.Bottom;
            panel.Children.Add(malliTextBox);
            malliTextBox.Text = "-500";

            Binding myBinding = new Binding();
            myBinding.Source = this; // MainWindow tietolähteeksi
            myBinding.Path = new System.Windows.PropertyPath("Laskuri"); // viitataan Laskuri-propertyyn
            myBinding.Mode = BindingMode.TwoWay;
            myBinding.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus;
            // bindataan malliTextBoxin Text-ominaisuus
            malliTextBox.SetBinding(TextBox.TextProperty, myBinding);
            myBinding.ValidationRules.Add(new PositiveNumberRule());

Lisätietoa

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/gko/luennot/luento12/
© Antti Ekonoja (antti.j.ekonoja@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
2012-03-22 14:06:19
Informaatioteknologia - Jyväskylän yliopiston informaatioteknologian tiedekunta