2011-08-13 24 views
5

bu özellik vardır:Benim kullanıcı denetiminde

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

Ve başka bir pencere beri Özür son kullanıcı denetimi için bir değer ayarlamaya çalışırken

o çalışmıyor bağlama,

public List<Problem> list; 

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

Ama XAML kodunda:

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

Ve yükte bu pencere içerir. Verileri aktarma. Neyin var?

cevap

1

WPF'de bir Alana bağlayamazsınız, bunun yerine bir özelliğe list değiştirmeniz gerekir.

Sen Xaml sizin UserControl ve ResultList yılında Bağımlılık Mülkiyet FooList diyoruz ama bu soruya bir yazım hatası tahmin ediyorum.

Bindings'in değerin güncellendiğini bilmesini sağlamak için Window numaralı INotifyPropertyChanged10'u uygulamanız gerekir.

Ben size Window isim ve

arkasında bağlama

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

Numune kodunda ElementName kullanabilirsiniz emin değilseniz size, Xaml ProblemView doğru DataContext kümesine sahip olmadığından emin değilim

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

Bir milyon Meleak teşekkürler, çalışıyor. Aslında, bu sana sorduğum aynı sorudur. Gerçekten yardımını duyuyorum. –

İlgili konular