2017-06-01 75 views
0

的新實例,在我的應用程序UWP,當我清除綁定的收集和再填寫一次我綁定視圖獲取更新,但是當我實例化一個新的集合時不更新綁定到的ObservableCollection <T>犯規更新視圖

這將更新視圖:

if (CurrentPivotHeader != "author") AuthorFacets.Clear(); 

這不更新視圖:

if (CurrentPivotHeader != "author") AuthorFacets = new ObservableCollection<IFacet>(); 

這裏是我的XAML:

<ListBox ItemsSource="{x:Bind AuthorFacets , Mode=OneWay}" 
         Name="AuthorListBox" 
         SelectionMode="Multiple" 
         SelectionChanged="AuthorListBox_SelectionChanged"> 
        <ListBox.ItemTemplate> 
         <DataTemplate x:DataType="local:IFacet"> 
          <StackPanel> 
           <TextBlock Text="{x:Bind read}" FontSize="10"></TextBlock> 
          </StackPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 

因爲一些其他的問題,我不能使用Clear()方法。有沒有辦法更新實例化視圖?

+1

* - 修復那些「由於其他一些問題,我不能用'清除()'方法。」問題。 – IInspectable

+1

向我們展示您的'AuthorFacets'實現。我幾乎可以肯定你沒有通知其二傳手的財產變化。 –

+0

你試過我的建議嗎?有用。 – mm8

回答

1

您需要實現INotifyPropertyChanged接口,提高了AuthorFacets屬性PropertyChanged事件:

public sealed partial class MainPage : Page, INotifyPropertyChanged 
{ 
    ... 

    private ObservableCollection<IFacet> _authorFacets; 
    public ObservableCollection<IFacet> AuthorFacets 
    { 
     get { return _authorFacets; } 
     set { _authorFacets = value; RaisePropertyChanged(nameof(AuthorFacets)); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void RaisePropertyChanged(string name) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 
+0

我是否還需要在'IFacet'(Type)類中實現'InotifyPropertyChanged'還是隻在'ObservableCollection'類中實現?因爲僅在ObservableCollections上實現它似乎不能解決問題。 –

+0

您需要在AuthorFacets源屬性根據我的答案定義的類中實現。 – mm8

+0

不會改變任何東西 –

相關問題