-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
});
}
}
}
を使用しています。新しいオブジェクトを割り当てるのではなく、 "SearchInBanksMethod"で "clear"を使用してください。また、BanksVMがINotifyPropertyChangedから継承していることを確認してください。 –
OKですが、これは問題を解決していません –
問題を解決するはずです。私は使用することをお勧めします 公開ObservableCollection行{get;セット; } =新しい...(); この場合、コンストラクタで設定する必要はありません。 –