Tôi có một điều khiển người dùng mà tôi đang sử dụng bên trong một DataTemplate
, UserControl
này chứa một TextBox
được binded với Value tài sản (khai báo là một DependencyProperty
) của UserControl
tôi. Trong mẫu dữ liệu, tôi ràng buộc thuộc tính Giá trị với thuộc tính thực tế của tôi là Tên (cũng là DependencyProperty
). Nó hoạt động đúng cách, tôi chỉ định giá trị cho Tên thuộc tính trong khi đang tải và hiển thị số TextBox
, tôi thay đổi giá trị từ TextBox
và nó cập nhật tài sản của tôi Tên. Bây giờ vấn đề xảy ra khi tôi thêm một PropertyChangedEventHandler
vào thuộc tính phụ thuộc, tôi kiểm tra giá trị nếu nó hợp lệ, không làm gì nếu hợp lệ và gán giá trị cũ nếu không hợp lệ. Trong trường hợp giá trị không hợp lệ, khi tôi chỉ định giá trị cũ, cập nhật thuộc tính nhưng giá trị đó không hiển thị giá trị được cập nhật trong số TextBox
của UserControl
. bất cứ ai đó có thể trả lời tôi tại sao?WPF: TextBox Văn bản được không cập nhật
XAML của tôi UserControl
:
<UserControl x:Name="usercontrol">
<StackPanel>
<TextBlock ......./>
<TextBox Binding={Binding ElementName=usercontrol, Path=Value, Mode=TwoWay}/>
</StackPanel>
</UserControl>
Trong mã đằng sau Value là một DependencyProperty
Tôi đang sử dụng này trong tôi DataTemplate
:
<HierarchicalDataTemplate DataType="{x:Type myLib:myClass}" ItemsSource="{Binding Children}">
<Expander Header="{Binding}">
<WrapPanel>
<edproperty:TextPropertyEditor Caption="Name" Value="{Binding Name, Mode=TwoWay}"/>
<edproperty:TextPropertyEditor .................../>
<edproperty:TextPropertyEditor .................../>
<edproperty:TextPropertyEditor ...................../>
</WrapPanel>
</Expander>
</HierarchicalDataTemplate>
mẫu này tôi sử dụng trong một TreeView
. Bên TreeView
tôi nhập giá trị trong TextBox
mà cập nhật Value tài sản của UserControl
của tôi, rằng trong bản cập nhật lần lượt Tên tài sản của myClass
Tôi gán một PropertyChangedCallback
-Tên tôi về tài sản trong myClass
, thực hiện một số xác nhận và giao lại các OldValue
nếu xác thực không thành công. Nó lần lượt cập nhật Giá trị tài sản cũng có, nhưng tôi vẫn thấy rằng TextBox
có cùng giá trị mà tôi đã nhập trước đó không phải là cập nhật.
public string Name
{
get
{
return (string)GetValue(NameProperty);
}
set
{
SetValue(NameProperty, value);
}
}
// Using a DependencyProperty as the backing store for Name. This enables animation, styling, binding, etc...
public static readonly DependencyProperty NameProperty =
DependencyProperty.Register("Name", typeof(string), typeof(myClass), new UIPropertyMetadata(null, OnNameChanged));
protected static void OnNameChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
{
if(checkRequired && !IsValid(e.NewValue.ToString()))
{
checkRequired=false;
(sender as myClass).Name = args.OldValue.ToString();
}
}
private static bool IsValid(string name)
{
.............some logic here
}
Nếu không nhìn thấy mã của bạn, đây sẽ là một khó khăn để bình luận đúng cách. Bạn có thể đăng mã của bạn được không? –
quá nhiều, không thể đăng. Bạn có thể hỏi xem bạn có muốn giải thích thêm không. – viky
Không, bạn có thể viết đoạn mã tối thiểu để tái tạo ... Nếu không, chúng tôi sẽ đoán, không trả lời. Không ai thích sự không chắc chắn. Đặc biệt là lập trình viên .. – Anvaka