2011-08-13 25 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的UserControlResultList中称为依赖项属性FooList,但我猜这是问题中的拼写错误。

您应该在Window中执行INotifyPropertyChanged以让Bindings知道该值已更新。

我不知道你是否有在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

感谢百万Meleak,它的工作。事实上,这是我问过你的同一个问题。我真的很喜欢你的帮助。 –

相关问题