2016-02-16 83 views
1

我stuked有以下情況:的ObservableCollection項目不綁定toTextBox

我定義ObservableColletion

public ObservableCollection<Model.OSModel> OS { get; private set; } 

並創建實例的構造器:

public MyOSViewModel() // Constructor 
{ 
    OS = new ObservableCollection<Model.OSModel>(); 
} 

添加時一個項目收集操作系統:

public void OnTabClicked(ListaServicosTab listaServicosTab) 
{ 
    OS.Add(listaServicosTab.vm.OS); 
    OnPropertyChanged("OS"); 
} 

它不綁定做TextBox。

但是,如果一個實例化一個方法內集合:

public void OnTabClicked(ListaServicosTab listaServicosTab) 
{ 
    OS = new ObservableCollection<Model.OSModel>(); 
    OS.Add(listaServicosTab.vm.OS); 
    OnPropertyChanged("OS"); 
} 

它工作正常。 任何人都可以告訴我爲什麼會發生這種情況?

我的XAML腳本:

<DockPanel Background="CadetBlue" DataContext="{StaticResource OSData}"> 
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <TextBlock Text="{Binding Path=Nome}" FontFamily="Calibri" FontSize="20"/> 
    </StackPanel>  
</DockPanel> 
+0

已發佈的xaml代碼沒有TextBox.The textblock綁定到屬性Nome,並且該屬性不存在於您已發佈的代碼中。您可以添加更多details.are您嘗試將集合綁定到文本框? –

回答

0

您需要通知的ObservableCollection集合更改事件。

public ObservableCollection<obj> Notifications 
    { 
     get { return _Notifications; } 
     set 
     { 
      _Notifications = value; 
      NotifyPropertyChanged();     
      Notifications.CollectionChanged -= Notifications_CollectionChanged; 
      Notifications.CollectionChanged += Notifications_CollectionChanged; 
      } 
     } 
    } 

void Notifications_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     //Notify 
    } 

MSDN

的ObservableCollection代表動態數據採集,提供通知,當項目將添加,刪除,或當整個列表被刷新。

0

你完全不需要OnPropertyChanged("OS");你並沒有替換OS對象,而只是添加或刪除東西。

List和Observable集合之間的區別在於OS.Add()將觸發集合中「item」的OnPropertyChanged。在列表中它不會發生。這就是爲什麼我們使用一個可觀察的集合,將爲你做所有的工作。

public void OnTabClicked(ListaServicosTab listaServicosTab) 
{ 
    OS = new ObservableCollection<Model.OSModel>();// Dont do this 
    OS.Add(listaServicosTab.vm.OS); 
    OnPropertyChanged("OS");// Dont do this 
} 

每次單擊您將替換可觀察集合。你將最終只有一個對象。

public MyOSViewModel() // Constructor 
{ 
    OS = new ObservableCollection<Model.OSModel>(); 
     // should initialize only in constructor 
     //not in a place it will be called multiple times 
} 

public void OnTabClicked(ListaServicosTab listaServicosTab) 
{ 
    OS.Add(listaServicosTab.vm.OS); 
} 

在XAML,你應該有一個Items ControlList到此集合綁定不能疊加面板。

相關問題