2011-08-13 16 views
5

मेरे उपयोगकर्ता नियंत्रण में मैं इस संपत्ति है:कैसे मैं एक उपयोगकर्ता नियंत्रण करने के लिए एक क्षेत्र बाध्य कर सकते हैं

public static DependencyProperty FooListProperty = DependencyProperty.Register(
     "FooList", typeof(List<Problem>), typeof(ProblemView)); 

    public List<Problem> FooList 
    { 
     get 
     { 
      return (List<Problem>)GetValue(FooListProperty); 
     } 
     set 
     { 
      SetValue(FooListProperty, value); 
     } 
    } 

    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
    { 
     base.OnPropertyChanged(e); 

     if (e.Property == FooListProperty) 
     { 
      // Do something 
     } 
    } 

और एक और खिड़की के बाद से, मैं पिछले उपयोगकर्ता नियंत्रण के लिए एक मूल्य सेट करने का प्रयास:

<local:ProblemView HorizontalAlignment="Center" 
         VerticalAlignment="Center" FooList="{Binding list}" /> 

और भार में उस खिड़की में शामिल हैं:

public List<Problem> list; 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     // Some processes and it sets to list field 
     list = a; 
    } 

लेकिन XAML कोड में, बाध्यकारी यह काम नहीं कर रहा है। डेटा पास न करें। मैं क्या गलत हूँ?

उत्तर

1

आप WPF में किसी फ़ील्ड से जुड़ नहीं सकते हैं, तो आपको इसके बजाय list को एक संपत्ति में बदलना होगा।

आप Xaml में अपने UserControl और ResultList में निर्भरता संपत्ति FooList पर कॉल करते हैं लेकिन मुझे लगता है कि यह प्रश्न में एक टाइपो है।

Window में INotifyPropertyChanged को को लागू करना चाहिए ताकि बाइंडिंग को यह पता चल सके कि मान अपडेट किया गया है।

मुझे यकीन है कि आप Xaml ProblemView में सही DataContext सेट है, यदि आप अनिश्चित आप Window नाम और

पीछे बाध्यकारी

<Window Name="window" 
     ...> 
    <!--...--> 
    <local:ProblemView HorizontalAlignment="Center" 
         VerticalAlignment="Center" 
         ResultList="{Binding ElementName=window, 
              Path=List}" /> 
    <!--...--> 
</Window> 

नमूना कोड में ElementName उपयोग कर सकते हैं कर रहे हैं नहीं कर रहा हूँ

public partial class MainWindow : Window, INotifyPropertyChanged { //... private List<Problem> m_list; public List<Problem> List { get { return m_list; } set { m_list = value; OnPropertyChanged("List"); } } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } #endregion } 
+0

धन्यवाद दस लाख मीलेक, यह काम कर रहा है। वास्तव में, यह वही सवाल है जिसे मैंने आपसे पूछा था। मैं वास्तव में आपकी मदद की सराहना करता हूं। –

संबंधित मुद्दे