我的 WPF 應用程式有兩個 Tabitems 和一個 SQLite 資料庫,其中一個名為的表studentdata具有多個列。
在第一個 tabitem 中有一個名為 的資料網格dg1、一個組合框和一個按鈕。第二個 tabitem 目前只有一個名為的資料網格dg2,它應該顯示一些過濾的資料,為了簡單起見,它的PaidFeesOn列是空白的,只有那些行應該顯示在dg2. 組合框還應填寫唯一的學生姓名。
在dg1應用程式加載時打開時應該顯示所有資料,但是當從組合框中選擇一個專案然后按下按鈕時,應該只顯示列值與組合框所選專案匹配的dg1那些資料。Name
現在,為了使用組合框文本過濾資料網格,我在 viewmodel 中完成了以下操作:
public RelayCommand ComboFilterButtonClicked { get; set; }
public CollectionView ComboFilterView { get; set; }
public List<Students> _myitems;
public List<Students> MyItems
{
get { return _myitems; }
set { _myitems = value; }
}
public StudentsViewModel()
{
//........
ComboFilterButtonClicked = new RelayCommand(ComboFilterData);
MyItems = GetStudents();
ComboItems = CollectionViewSource.GetDefaultView(MyItems);
ComboFilterView = (CollectionView)CollectionViewSource.GetDefaultView(SData);
ComboFilterView.Filter = OnComboFilterTriggered;
}
public bool OnComboFilterTriggered(object item)
{
var lookup = item as Students;
if (lookup != null)
{
string x = "";
if (!string.IsNullOrEmpty(ComboText))
return (lookup.Name == x);
}
return true;
}
public void ComboFilterData(object param)
{
CollectionViewSource.GetDefaultView(MyItems).Refresh();
}
和組合框的 XAML:
<ComboBox IsEditable="True" Width="300"
ItemsSource="{Binding ComboItems}" DisplayMemberPath="Name"
Text="{Binding ComboText,Mode=TwoWay}">
</ComboBox>
但是當我的應用程式加載時,dg1資料網格是空白的,當我從組合框中選擇一個專案時,組合框文本顯示的文本System.Collections.Generic.List``1[filterDGs.MainWindow Students]是由于(我相信..)return GetStudents().ToString();在getof 中ComboText,但是應該get包含什么?
注意:我還嘗試將組合框自動完成建議附加(如 winforms)功能添加到組合框。
我在這里分享完整的代碼,以便更好地理解和測驗(如果有人愿意的話)。
誰能幫我這個 ?
uj5u.com熱心網友回復:
ComboText將視圖模型中的屬性替換為包含當前選定Students物件的屬性:
private Students _selectedStudent;
public Students SelectedStudent
{
get
{
return _selectedStudent;
}
set
{
_selectedStudent = value;
OnPropertyChanged(nameof(SelectedStudent));
}
}
public bool OnComboFilterTriggered(object item)
{
var lookup = item as Students;
return lookup != null
&& !string.IsNullOrEmpty(_selectedStudent?.Name)
&& lookup.Name == _selectedStudent.Name;
}
public void ComboFilterData(object param)
{
CollectionViewSource.GetDefaultView(MyItems).Filter = OnComboFilterTriggered;
}
SelectedItem將 的屬性系結ComboBox到此屬性:
<ComboBox IsEditable="True" Width="300"
ItemsSource="{Binding ComboItems}" DisplayMemberPath="Name"
SelectedItem="{Binding SelectedStudent}">
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486023.html
上一篇:WPF:畫布,影片矩形
