我一直在努力寻找一个似乎是一个简单问题的解决方案。我试图找到一种方法来迭代我的ListView并获取值。
我有一个带有绑定的ListView,在xaml(简化)中看起来像这样:
<ListView x:Name="MColumnsListXaml" HorizontalAlignment="Left" Height="Auto" Margin="0,42,0,0" VerticalAlignment="Top" Width="Auto">
<ListView.View>
<GridView>
<GridViewColumn Header="First Name" Width="Auto" DisplayMemberBinding="{Binding MColumnName}" />
<GridViewColumn Header="Last Name" Width="Auto" DisplayMemberBinding="{Binding MColumnName2}" />
</GridView>
</ListView.View>
</ListView>
我宣布绑定:
public class MandatoryColumns
{
public string MColumnName { get; set; }
public string MColumnName2 { get; set; }
}
列由一个调用方法的事件触发器填充:
private void btnValidateColumns_Click(object sender, RoutedEventArgs e)
{
MandatoryOptionalColumnsList();
}
public void MandatoryOptionalColumnsList()
{
List<MandatoryColumns> MColumnsList = new List<MandatoryColumns>();
MColumnsList.Add(new MandatoryColumns() { MColumnName = "John", MColumnName2 = "Smith" });
MColumnsList.Add(new MandatoryColumns() { MColumnName = "Jason", MColumnName2 = "Bell" });
MColumnsListXaml.ItemsSource = MColumnsList;
}
现在我需要获取ListView中的信息,这就是我被困的地方。我的目的是在ListView中提取一列并与另一个列表进行交叉检查。为了得到这些值,我按照以下方式尝试了foreach
循环:
public void test()
{
foreach (var item in MColumnsListXaml.Items)
{
MessageBox.Show(MColumnsListXaml.ToString()); //MColumnsListXaml = {System.Windows.Controls.ListView Items.Count:2}
MessageBox.Show(MColumnsListXaml.Items.ToString()); //MColumnsListXaml.Items = {System.Windows.Controls.ItemCollection}
MessageBox.Show(item.ToString()); //item = {tutorialWpfApplication1.MandatoryColumns}
}
}
在调试器中,我看到项目返回对象{tutorialWpfApplication1.MandatoryColumns}
并保留我的needed information,但我找不到访问它的方法。我尝试通过使item
迭代dynamic
,在线声明ListViewItem
而不是`var和各种解决方案,但所有内容都会导致异常错误。
答案 0 :(得分:4)
试试这个:
foreach (var item in MColumnsListXaml.Items.OfType<MandatoryColumns>())
{
MessageBox.Show(item.MColumnName);
MessageBox.Show(item.MColumnName2);
}
答案 1 :(得分:3)
设置ItemsSource
的值后,您也可以获取该值。所以你可以投射和使用像
List<MandatoryColumns> items = (List<MandatoryColumns>)MColumnsListXaml.ItemsSource;
foreach (MandatoryColumns item in items)
{
//Do some work with the MandatoryColumns item
}
答案 2 :(得分:1)
如果您将item
投射到MandatoryColumn
类型,则应该可以访问这些值。只要您知道列表中的每个项目都属于该类型,那么在投射时不应该出现异常。