Làm cách nào để cập nhật ràng buộc dữ liệu ngay khi ký tự mới được nhập vào một Hộp văn bản?
Tôi đang tìm hiểu về các ràng buộc trong WPF và bây giờ tôi đã trở thành khó khăn trên một (hy vọng) vấn đề đơn giản.Làm cho một hộp văn bản WPF bắt buộc lửa trên mỗi nhân vật mới?
Tôi có một lớp FileLister đơn giản, nơi bạn có thể đặt thuộc tính Đường dẫn và sau đó nó sẽ cung cấp cho bạn danh sách tệp khi bạn truy cập thuộc tính FileNames. Đây là lớp rằng:
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));
}
}
}
Tôi đang sử dụng các FileLister như một StaticResource trong ứng dụng rất đơn giản này:
<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>
Các ràng buộc đang làm việc. Nếu tôi thay đổi giá trị trong hộp văn bản và sau đó nhấp vào bên ngoài của nó, nội dung hộp danh sách sẽ cập nhật (miễn là đường dẫn tồn tại).
Vấn đề là tôi muốn cập nhật ngay khi ký tự mới được nhập và không đợi đến khi hộp văn bản mất tiêu điểm.
Tôi có thể làm như thế nào? Có cách nào để thực hiện điều này trực tiếp trong xaml hay tôi phải xử lý các sự kiện TextChanged hoặc TextInput trên hộp?
Cảm ơn! Chính xác như giải pháp đơn giản như tôi đã hy vọng cho :) – luddet
Đối với tôi nó đã không làm việc ... Tôi muốn có được văn bản trở lại giá trị trước đó của nó, trong trường hợp nó không phải là một số. Chỉ khi được thêm IsAsync = True nó đã làm việc. – ilans