C# WPF 遍历 ListView 项

Trm*_*Trm 0 c# data-binding wpf listview

我一直在发疯,试图找到一个看似简单的问题的解决方案。我试图找到一种方法来遍历我的 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>
Run Code Online (Sandbox Code Playgroud)

我声明绑定:

public class MandatoryColumns
{
    public string MColumnName { get; set; }
    public string MColumnName2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

列由调用方法的事件触发器填充:

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;
}
Run Code Online (Sandbox Code Playgroud)

现在我需要获取 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}
    }
}
Run Code Online (Sandbox Code Playgroud)

在调试器中,我看到 item 返回 object{tutorialWpfApplication1.MandatoryColumns}并保存我需要的信息,但我找不到访问它的方法。我试图通过 make itemit来迭代dynamic,声明ListViewItem而不是 `var 和各种在线解决方案,但一切总是导致异常错误。

mm8*_*mm8 5

尝试这个:

foreach (var item in MColumnsListXaml.Items.OfType<MandatoryColumns>())
{
    MessageBox.Show(item.MColumnName);
    MessageBox.Show(item.MColumnName2);
}
Run Code Online (Sandbox Code Playgroud)