2017-06-16 22 views
-1

検索ボックスの検索結果を表示するリストビューがあります。ウィンドウがロードされると、データベースからのすべてのデータがリストビューに表示されます - "これは良い"WPFでリストビューが自動的に更新されない

しかし、私が物を検索すると、ビューモデルの変数が変更され、新しいデータが保存されますが、変数からの新しいデータは表示されません。リストビューのための

XAMLコード

<ListView x:Name="itemsListView" ScrollViewer.CanContentScroll="True" 
        ItemsSource="{Binding Rows, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" 
       Grid.Row="1" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       Margin="40,10,40,10" 
       FlowDirection="RightToLeft" IsSynchronizedWithCurrentItem="True" SelectedIndex="1"> 
    <ListView.View> 
     <GridView AllowsColumnReorder="False"> 
      <GridViewColumn DisplayMemberBinding="{Binding BankName}" 
          Width="250" 
          Header="bank name"/> 
      <GridViewColumn DisplayMemberBinding="{Binding Credit}" 
          Header="credit" 
          Width="100"/> 
      <GridViewColumn DisplayMemberBinding="{Binding IsActive}" 
          Header="statue" 
          Width="100"/> 
      <GridViewColumn DisplayMemberBinding="{Binding Notes}" 
          Header="notes" 
          Width="230"/> 
     </GridView> 
    </ListView.View> 
</ListView> 

ビューモデルコード

class BanksVM 
{ 
    private ObservableCollection<BanksListVM> m_Rows; 

    public ObservableCollection<BanksListVM> Rows 
    { 
     get { return m_Rows; } 
     set { m_Rows = value; } 
    } 

    private string _BanksSearchBox; 

    public string BanksSearchBox 
    { 
     get { return _BanksSearchBox; } 
     set { 
      _BanksSearchBox = value; 
      SearchInBanksMethod(); 
     } 
    } 

    //set all data to listview 
    public BanksVM() 
    { 
     Rows = new ObservableCollection<BanksListVM>(); 
     Rows.Clear(); 

     List <Banks> bankslist = new List<Banks>(); 
     Banks banks = new Banks(); 
     bankslist = banks.GetAllBanks(); 

     foreach (Banks b in bankslist) 
     { 
      string IsActive = ""; 

      if (b.IsActive == true) 
       IsActive = "open"; 
      else 
       IsActive = "closed"; 

      Rows.Add(new BanksListVM 
      { 
       ID = b.ID, 
       BankName = b.BankName, 
       IsActive = IsActive, 
       Credit = b.Credit, 
       Notes = b.Notes 
      }); 
     } 
    } 

    // refresh listview method 
    public void SearchInBanksMethod() { 
     Rows = new ObservableCollection<BanksListVM>(); 
     Rows.Clear(); 

     List<Banks> bankslist = new List<Banks>(); 
     search Search = new search(); 
     bankslist = Search.SearchInBanks(_BanksSearchBox); 

     foreach (Banks b in bankslist) 
     { 
      string IsActive = ""; 

      if (b.IsActive == true) 
       IsActive = "open"; 
      else 
       IsActive = "closed"; 

      Rows.Add(new BanksListVM 
      { 
       ID = b.ID, 
       BankName = b.BankName, 
       IsActive = IsActive, 
       Credit = b.Credit, 
       Notes = b.Notes 
      }); 
     } 
    } 
} 
+0

を使用しています。新しいオブジェクトを割り当てるのではなく、 "SearchInBanksMethod"で "clear"を使用してください。また、BanksVMがINotifyPropertyChangedから継承していることを確認してください。 –

+0

OKですが、これは問題を解決していません –

+1

問題を解決するはずです。私は使用することをお勧めします 公開ObservableCollection 行{get;セット; } =新しい...(); この場合、コンストラクタで設定する必要はありません。 –

答えて

1

のObservableCollectionを再割り当て、バインディングは、新しいプロパティ値について通知されません。 SearchInBanksMethod

Rows = new ObservableCollection<BanksListVM>(); 

を削除し、唯一のあなたは、あなたが新しいとそれをインスタンス化した場合、行コレクションをクリアする必要はありません

Rows.Clear(); 
関連する問題