[WPF] DependencyProperty Changed wordt niet uitgevoerd

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dj_vibri
  • Registratie: Oktober 2007
  • Laatst online: 16-09 17:16

dj_vibri

int(e^x) = f(u)^n

Topicstarter
Alloha,

ben momenteel bezig met een ontwikkelen van een applicatie voor eigen gebruik ivm facturen e.d.
Dit ben ik bezig in WPF/.NET 3.5 en maak gebruik van het MVVM principe.

Op mijn window heb ik een usercontrol staan, welke om klantengegevens komt vragen. Op deze usercontrol staat een Combobox en een textbox, die respectievelijk dienen om de gemeente te zoeken/postcode in te geven.

Nu is het de bedoeling dat wanneer je start met typen in de textbox, de dropdown gefilterd wordt. Heb al eens gekeken naar een autocomplete box voor wpf, en heb er een gevonden... alleen kan ik hier niet aan uit, dus dacht ik: laten we hetzelf doen :d :)

Ik heb dus een DependencyProperty aangemaakt, inclusief eigen classe welke inherit van het type 'TextBox':

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows;

namespace Invoices.App
{
    public class FilterTextBox:TextBox
    {
       static FilterTextBox()
       {
           DefaultStyleKeyProperty.OverrideMetadata(typeof(FilterTextBox),
               new FrameworkPropertyMetadata(typeof(FilterTextBox)));
       }



       public String FilterText
       {
           get { return (String)GetValue(FilterTextProperty); }
           set { SetValue(FilterTextProperty, value); }
       }

       // Using a DependencyProperty as the backing store for FilterText.  This enables animation, styling, binding, etc...
       public static readonly DependencyProperty FilterTextProperty =
           DependencyProperty.Register("FilterText", typeof(String), typeof(FilterTextBox), new UIPropertyMetadata(String.Empty));


       protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
       {
           base.OnPropertyChanged(e);
           if (e.Property == FilterTextBox.FilterTextProperty)
           {
               MessageBox.Show("Property changed");
           }
       }

    }
}


in mijn xaml pagina zelf plaats ik het volgende:

XML:
1
2
3
4
5
6
<local:FilterTextBox 
                        Style="{StaticResource ValidatingTextBox}" 
                        Width="150"
                        FilterText="{Binding Path=Text,UpdateSourceTrigger=PropertyChanged}"
                        Margin="10,0,0,0">
                    </local:FilterTextBox>


Het is dus eigenlijk de bedoeling dat ik mijn property "FilterText" laat invullen en een messagebox laat tonen, wanneer er een teken ingevoerd wordt.....

Tevergeefs.....
Ook heb ik al geprobeerd om de property 'Text' te binden aan de custom property maar ook dit lijkt niet te werken. Wanneer ik code intype achter FilterText (dus in xaml), dan krijg ik steeds mijn messageboxen te zien.... :) maar bij het uitvoeren van de applicatie dus niet :s

Ik ben er redelijk zeker van dat dit iets simpels gaat zijn maar dat ik iets over het hoofd zie....

Iemand enig idee?

Last night I lay in bed looking up at the stars in the sky and I thought to myself, where the heck is the ceiling.


Acties:
  • 0 Henk 'm!

  • Jay-P
  • Registratie: Oktober 2003
  • Laatst online: 04-06 00:39
Volgens mij vergeet je de callback te registreren in je dependencyproperty.register methode. Zoiets als (check de new propertychangedcallback):

C#:
1
DependencyProperty.Register("AuthorName",   typeof(string),   typeof(AuthorTextField), new  PropertyMetadata(new  PropertyChangedCallback(AuthorNameChanged)));


C#:
1
2
3
4
5
6
private static void AuthorNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{

// Code for dealing with author name changes

}

Acties:
  • 0 Henk 'm!

  • dj_vibri
  • Registratie: Oktober 2007
  • Laatst online: 16-09 17:16

dj_vibri

int(e^x) = f(u)^n

Topicstarter
Jay-P schreef op donderdag 11 maart 2010 @ 16:48:
Volgens mij vergeet je de callback te registreren in je dependencyproperty.register methode. Zoiets als (check de new propertychangedcallback):
hmm..... lijkt me inderdaad een logisch gegeven :$ straks eens proberen als ik thuis ben, I keep you informed :)

*schaamt zich omdat hij al gebruik gemaakt heeft van een hele hoop dependency properties, maar nog niet veel met 'propertychanged' *

Update:

Gisterenavond nog enkele pogingen gedaan maar blijkbaar ga ik toch ergens de mist in... Wanneer ik aan een tweede textbox de name: TestFilter meegeef en vervolgens in mijn CustomTextBox op de property: FilterText={Binding ElementName=TestFilter,Path=Text,UpdateSourceTrigger=PropertyChanged} meegeef dan voert hij de code wel uit wanneer ik in de tweede textbox intyp.....

wie-o-wie kan me in de juiste richting sturen om bovenstaand probleem op te lossen? Kan ik hier misschien beter gebruik maken van een Usercontrol die een textbox en combobox bevat, welke ik vervolgens op mijn window plaats?

De implementatie voor de combobox.filter() staat reeds klaar, dus zou uitgevoerd moeten worden wanneer er in een textbox getypt wordt.... :$

[ Voor 42% gewijzigd door dj_vibri op 12-03-2010 08:48 ]

Last night I lay in bed looking up at the stars in the sky and I thought to myself, where the heck is the ceiling.