मैं एक उपयोगकर्ता नियंत्रण है कि मैं एक DataTemplate
अंदर का उपयोग कर रहा है, यह UserControl
एक TextBox
जो मेरे UserControl
की मूल्य संपत्ति (एक DependencyProperty
के रूप में घोषित) के साथ आबद्ध होता है। डेटा टेम्पलेट में मैं अपनी वास्तविक संपत्ति के साथ वैल्यू संपत्ति को बांधता हूं नाम (एक DependencyProperty
भी)। यह ठीक से काम करता है, मैं नाम संपत्ति लोड करने के दौरान TextBox
प्रदर्शित करता हूं, मैं TextBox
से मान बदलता हूं और यह नाम संपत्ति को भी अपडेट करता है। अब समस्या तब आती है जब मैं निर्भरता संपत्ति में PropertyChangedEventHandler
जोड़ता हूं, यदि यह वैध है तो मैं मान की जांच करता हूं, वैध होने पर मान्य नहीं है और मान्य नहीं होने पर पुराना मान असाइन करता हूं। मान मान्य होने पर, जब मैं इसे पुराना मान, संपत्ति अद्यतन असाइन करता हूं लेकिन यह UserControl
के TextBox
में अद्यतन मान प्रदर्शित नहीं कर रहा है। क्या कोई मुझे बता सकता है क्यों?WPF: पाठ बॉक्स पाठ को अद्यतन करने नहीं है
XAML की मेरी UserControl
:
<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>
इस टेम्पलेट मैं हूं:
<UserControl x:Name="usercontrol">
<StackPanel>
<TextBlock ......./>
<TextBox Binding={Binding ElementName=usercontrol, Path=Value, Mode=TwoWay}/>
</StackPanel>
</UserControl>
मूल्य पीछे कोड में एक DependencyProperty
मैं अपने DataTemplate
में इस का उपयोग कर रहा हैमें उपयोग करना। TreeView
अंदर मैं TextBox
जो मेरे UserControl
की मूल्य संपत्ति अद्यतन करता है में मान दर्ज करें, कि बारी अद्यतन नाम myClass
मैं बताए हूँ की संपत्ति में एक PropertyChangedCallback
मेरी नाम myClass
में संपत्ति, कुछ मान्यता प्रदर्शन और OldValue
फिर नियत करने के लिए अगर सत्यापन विफल रहता है। यह बदले में वैल्यू संपत्ति भी अपडेट करता है, लेकिन मुझे अभी भी यह देख रहा है कि TextBox
का वही मान है जो मैंने पहले अपडेट नहीं किया था।
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
}
अपना कोड देखे बिना, यह सही तरीके से टिप्पणी करने के लिए एक कठिन होगा। क्या आप अपना कोड कृपया पोस्ट कर सकते हैं? –
यह बहुत अधिक है, इसे पोस्ट नहीं किया जा सकता है। आप पूछ सकते हैं कि क्या आप अधिक स्पष्टीकरण चाहते हैं। – viky
नहीं, आप पुन: उत्पन्न करने के लिए न्यूनतम कोड टुकड़ा लिख सकते हैं ... अन्यथा, हम अनुमान लगाएंगे, जवाब नहीं देंगे। कोई भी अनिश्चितता पसंद नहीं करता है। विशेष रूप से प्रोग्रामर .. – Anvaka