C# 使用Collectionview源的wpf中Datagrid的数据绑定不起作用
这里是数据网格绑定为集合视图源的静态源的代码片段。 但是datagrid没有显示所需的结果C# 使用Collectionview源的wpf中Datagrid的数据绑定不起作用,c#,wpf,collections,C#,Wpf,Collections,这里是数据网格绑定为集合视图源的静态源的代码片段。 但是datagrid没有显示所需的结果 <Window.Resources> <local:EDiscoveryCoreDataList x:Key="CoreData"/> <CollectionViewSource x:Key="cvsCoreData" Source="{StaticResource CoreData}" Filter="CollectionViewSourc
<Window.Resources>
<local:EDiscoveryCoreDataList x:Key="CoreData"/>
<CollectionViewSource x:Key="cvsCoreData" Source="{StaticResource CoreData}" Filter="CollectionViewSource_Filter">
</CollectionViewSource>
</Window.Resources>
<Grid Grid.Row="2" Grid.Column="0">
<Canvas x:Name="PanelCanvas1" >
<DataGrid ItemsSource="{Binding Source={StaticResource cvsCoreData}}" SelectedCellsChanged="Data_SelectedCellsChanged" SelectionUnit="Cell" IsReadOnly="True" Style="{StaticResource AzureDataGrid}" AutoGenerateColumns="False" x:Name="Data" Canvas.Top="29" Width="1063" Height="536" VerticalScrollBarVisibility="Auto">
<!--<DataGrid.Columns>
<DataGridTextColumn Header="Key Term" Binding="{Binding KeyTerm }" />
<DataGridTextColumn Header="Key Term Description" Binding="{Binding KeyTermDescription}" />
<DataGridTextColumn Header="Short Hand" Binding="{Binding ShortHand}" />
<DataGridTextColumn Header="Rule" Binding="{Binding Rule}" />
</DataGrid.Columns>-->
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="{Binding Synonyms}"/>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="View in Document" />
<MenuItem Header="Add/Edit Key Terms or Synonyms" />
<MenuItem Header="Add/Edit Scoring Answers" />
<MenuItem Header="Edit Rule" />
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
数据类:
public class EDiscoveryCoreData
{
internal string PartNo;
internal string Section;
private List<string> _synonyms;
public string Synonyms
{
get
{
string returnstring = string.Empty;
foreach (string synonyms in _synonyms)
{
returnstring += synonyms + "\n";
}
return returnstring;
}
}
public string KeyTerm { get; set; }
public string KeyTermDescription { get; set; }
public string ShortHand { get; set; }
public string Rule { get; set; }
public EDiscoveryCoreData() { }
public EDiscoveryCoreData(string PartNo, string Section, string KeyTerm, string KeyTermDescription, string ShortHand, string Rule, List<string> synonyms):this()
{
this.KeyTerm = KeyTerm;
this.KeyTermDescription = KeyTermDescription;
this.PartNo = PartNo;
this.Rule = Rule;
this.Section = Section;
this.ShortHand = ShortHand;
this._synonyms = synonyms;
}
}
公共类EDiscoveryCoreData
{
内部字符串零件号;
内管柱段;
私有列表(同义词);;
公共字符串同义词
{
得到
{
string returnstring=string.Empty;
foreach(字符串同义词在_同义词中)
{
returnstring+=同义词+“\n”;
}
返回字符串;
}
}
公共字符串关键字{get;set;}
公共字符串KeyTermDescription{get;set;}
公共字符串速记{get;set;}
公共字符串规则{get;set;}
公共EDiscoveryCoreData(){}
公共EDiscoveryCoreData(字符串部分号、字符串部分、字符串关键字、字符串关键字说明、字符串速记、字符串规则、列表同义词):this()
{
this.KeyTerm=KeyTerm;
this.KeyTermDescription=KeyTermDescription;
this.PartNo=PartNo;
这个.规则=规则;
本节=节;
这个。速记=速记;
这个。_同义词=同义词;
}
}
收集类别:
public class EDiscoveryCoreDataList : ObservableCollection<EDiscoveryCoreData>
{
//public List<EDiscoveryCoreData> DataList { get; set; }
public EDiscoveryCoreDataList():base()
{
//DataList = new List<EDiscoveryCoreData>();
}
public void Add( EDiscoveryCoreData data)
{
base.Add(data);
}
//public List<EDiscoveryCoreData> GetList()
//{
// return DataList;
//}
public List<string> GetPartNo()
{
List<string> partList = this.Select(data => data.PartNo).ToList();
partList.Insert(0, "All");
return partList.Distinct().ToList();
}
public List<string> GetSection()
{
List<string> sectionList = this.Select(data => data.Section).ToList();
sectionList.Insert(0, "All");
return sectionList.Distinct().ToList();
}
public List<EDiscoveryCoreData> GetFilterData(string partno, string section)
{
//Console.WriteLine(partno + "======" + section);
if (section == null)
section = string.Empty;
List<EDiscoveryCoreData> filteredData;
if (partno.Equals("All") && section.Equals("All"))
return this.ToList();
else if (partno.Equals("All") && !section.Equals(""))
filteredData = this.Where(data => (data.Section.Equals(section))).ToList();
else if (section.Equals("All"))
filteredData = this.Where(data => (data.PartNo.Equals(partno))).ToList();
else
filteredData = this.Where(data => (data.PartNo.Equals(partno) && data.Section.Equals(section))).ToList();
return filteredData;
}
public List<EDiscoveryCoreData> GetFilterData(string searchstring)
{
Console.WriteLine(searchstring);
if (searchstring.Equals(string.Empty))
return this.ToList();
else
return this.Where(data => (data.KeyTerm.ToUpper().Contains(searchstring.ToUpper()))).ToList();
}
public List<string> GetListofKeyTerm()
{
return this.Select(keyterm => keyterm.KeyTerm).ToList();
}
}
}
公共类EDiscoveryCoreDataList:ObservableCollection
{
//公共列表数据列表{get;set;}
公共EDiscoveryCoreDataList():base()
{
//DataList=新列表();
}
公共作废添加(EDiscoveryCoreData数据)
{
base.Add(数据);
}
//公共列表GetList()
//{
//返回数据列表;
//}
公共列表GetPartNo()
{
List partList=this.Select(data=>data.PartNo.ToList();
零件清单。插入(0,“全部”);
返回partList.Distinct().ToList();
}
公共列表部分()
{
List sectionList=this.Select(data=>data.Section.ToList();
章节列表。插入(0,“全部”);
返回sectionList.Distinct().ToList();
}
公共列表GetFilterData(字符串部分号,字符串部分)
{
//Console.WriteLine(部件号+“==========”+部分);
if(节==null)
section=string.Empty;
列表过滤器数据;
if(零件号等于(“全部”)&截面等于(“全部”))
返回这个.ToList();
else if(partno.Equals(“全部”)&&!section.Equals(“”)
filteredData=this.Where(data=>(data.Section.Equals(Section))).ToList();
else if(第等于节(“全部”))
filteredData=this.Where(data=>(data.PartNo.Equals(PartNo)).ToList();
其他的
filteredData=this.Where(data=>(data.PartNo.Equals(PartNo)和&data.Section.Equals(Section)).ToList();
返回过滤器数据;
}
公共列表GetFilterData(字符串搜索字符串)
{
Console.WriteLine(搜索字符串);
if(searchstring.Equals(string.Empty))
返回这个.ToList();
其他的
返回此.Where(data=>(data.KeyTerm.ToUpper().Contains(searchstring.ToUpper())).ToList();
}
公共列表GetListofKeyTerm()
{
返回this.Select(keyterm=>keyterm.keyterm.ToList();
}
}
}
填充集合
internal EDiscoveryCoreDataList CoreDataList;
public Brush BorderColor { get; set; }
public MainWindow()
{
InitializeComponent();
CoreDataList = (EDiscoveryCoreDataList)this.Resources["CoreData"];
//CoreDataList.Add(new EDiscoveryCoreData("aa", "bb", "cc", "dd", "ee", "ff", new List<string> { "abc" }));
PanelCanvas.Visibility = Visibility.Hidden;
PanelCanvas1.Visibility = Visibility.Hidden;
Data.SelectionMode = DataGridSelectionMode.Extended;
BorderColor = new SolidColorBrush(Color.FromRgb(0xff, 0xff, 0xff));
}
internal void PopulateMainWindow(EDiscoveryCoreDataList coredatalist)
{
CoreDataList = coredatalist;
}
内部EDiscoveryCoreDataList CoreDataList;
公共笔刷边框颜色{get;set;}
公共主窗口()
{
初始化组件();
CoreDataList=(EDiscoveryCoreDataList)this.Resources[“CoreData”];
//添加(新的EDiscoveryCoreData(“aa”、“bb”、“cc”、“dd”、“ee”、“ff”、新列表{“abc”));
PanelCanvas.Visibility=Visibility.Hidden;
PanelCanvas1.Visibility=Visibility.Hidden;
Data.SelectionMode=DataGridSelectionMode.Extended;
BorderColor=新的SolidColorBrush(Color.FromRgb(0xff,0xff,0xff));
}
内部无效填充主窗口(EDiscoveryCoreDataList coredatalist)
{
CoreDataList=CoreDataList;
}
在这里,我通过从另一个子窗口调用函数来填充集合
第一个问题是dataGrid中什么都看不见
您已经将AutoGenerateColumns设置为False,并且还注释掉了XAML中的columns部分将AutoGenerateColumns设置为true以获取列
第二个问题,dataGrid中没有可见的行
在PopulateMainWindow
方法中,您将内部列表CoreDataList
设置为方法中传递的其他引用。但这不会更新XAML中定义的资源CoreData(您的dataGrid实际上绑定到该资源)
您需要在CoreData列表中为GUI添加对象,以获得通知,如下所示:
internal void PopulateMainWindow(EDiscoveryCoreDataList coredatalist)
{
var actualList = (EDiscoveryCoreDataList)this.Resources["CoreData"];
foreach(EDiscoveryCoreData coreData in coredatalist)
{
actualList.Add(coreData);
}
}
注意-然而,理想的做法是在ViewModel中声明列表实例,并将CollectionViewSource的源绑定到该列表。所以,当您修改该列表时,GUI会收到通知,您不必从XAML资源获取实例。您能看到任何行还是什么都看不到?另外,
DataGrid.Columns
part在您的问题和AutoGener中被注释掉