2011-08-13 15 views
5

En mi control de usuario que tienen esta propiedad:¿Cómo puedo enlazar un campo para un control de usuario

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 
     } 
    } 

Y desde otra ventana, estoy tratando de establecer un valor para el control último usuario:

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

Y esa ventana en la carga contiene:

public List<Problem> list; 

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

Pero en el código XAML, unión que no está funcionando. No pase los datos. ¿Qué estoy mal?

Respuesta

1

No se puede enlazar a un campo en WPF; en su lugar, tendrá que cambiar list.

Llamas a la Propiedad de Dependencia FooList en tu UserControl y ResultList en Xaml pero supongo que es un error tipográfico en la pregunta.

Debe implementar INotifyPropertyChanged en el Window para que los enlaces sepan que el valor se ha actualizado.

No estoy seguro de si tiene la correcta DataContext conjunto en el Xaml ProblemView, si no está seguro que puede nombrar el WindowElementName y utilizar en el código de ejemplo de unión

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

detrás

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

Gracias a un millón de Meleak, está funcionando. De hecho, esta es la misma pregunta que te hice. Realmente aprecio tu ayuda. –

Cuestiones relacionadas