Faire un WPF zone de texte de liaison de feu sur chaque nouveau personnage?

Comment puis-je faire une liaison de données mise à jour dès qu'un nouveau caractère est tapé dans une zone de texte?

Je suis en train d'apprendre sur les liaisons dans WPF et maintenant je suis coincé sur une (on l'espère) simple question.

J'ai un simple FileLister classe où vous pouvez définir un Chemin d'accès à la propriété, et puis il vous donnera une liste de fichiers lorsque vous accédez à des noms de fichier de la propriété.
Ici, c'est que la classe:

class FileLister:INotifyPropertyChanged {
    private string _path = "";

    public string Path {
        get {
            return _path;
        }
        set {
            if (_path.Equals(value)) return;
            _path = value;
            OnPropertyChanged("Path");
            OnPropertyChanged("FileNames");
        }
    }

    public List<String> FileNames {
        get {
            return getListing(Path);
        }
    }

    private List<string> getListing(string path) {
        DirectoryInfo dir = new DirectoryInfo(path);
        List<string> result = new List<string>();
        if (!dir.Exists) return result;
        foreach (FileInfo fi in dir.GetFiles()) {
            result.Add(fi.Name);
        }
        return result;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string property) {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) {
            handler(this, new PropertyChangedEventArgs(property));
        }
    }
}

Je suis à l'aide de la FileLister comme un StaticResource dans cette très simple d'application:

<Window x:Class="WpfTest4.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfTest4"
    Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:FileLister x:Key="fileLister" Path="d:\temp" />
    </Window.Resources>
    <Grid>
        <TextBox Text="{Binding Source={StaticResource fileLister}, Path=Path, Mode=TwoWay}"
        Height="25" Margin="12,12,12,0" VerticalAlignment="Top" />
        <ListBox Margin="12,43,12,12" Name="listBox1" ItemsSource="{Binding Source={StaticResource ResourceKey=fileLister}, Path=FileNames}"/>
    </Grid>
</Window>

La liaison est de travail. Si je change la valeur dans la zone de texte, puis cliquez en dehors de cela, la zone de liste contenu de la mise à jour (tant que le chemin d'accès existe).

Le problème est que je voudrais mettre à jour dès qu'un nouveau caractère est tapé, et de ne pas attendre jusqu'à ce que la zone de texte perdre le focus.

Comment puis-je le faire?
Est-il un moyen de le faire directement dans le code xaml, ou dois-je gérer TextChanged ou TextInput événements sur la boîte?

InformationsquelleAutor luddet | 2012-05-16