2017-03-06 13 views
0

簡単な問題のような解決策を見つけようとしています。私はListViewを反復して値を取得する方法を見つけようとしています。C#WPF ListViewの項目を繰り返します。

Iは、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とすることで反復しようとしましたが、 `varやさまざまな解決法の代わりにListViewItemと宣言しましたが、すべて例外エラーが発生しました。

答えて

3

を。だから、キャスト、あなたができるアクセスの値でなければなりませんMandatoryColumn型にitemをキャストした場合

List<MandatoryColumns> items = (List<MandatoryColumns>)MColumnsListXaml.ItemsSource; 
foreach (MandatoryColumns item in items) 
{ 
    //Do some work with the MandatoryColumns item 
} 
+0

高速回答ありがとうございますが、結果はまったく同じです。 Itemは '{tutorialWpfApplication1.MandatoryColumns}'を返します。私の投稿のスクリーンショットにあるように。この情報はデバッガの 'item'オブジェクトで見ることができますが、アクセス方法はわかりません。 – Trm

+0

私は答えが早すぎました。私は実際に値にアクセスできます。私はそれがとてもシンプルだったとは信じられない! – Trm

+0

彼はあなたの質問に答えた場合、男に "正解"投票を与えるのを忘れないでください。 –

3

この試してみてください:あなたはまた、値を得ることができますItemsSourceの値を設定した後

foreach (var item in MColumnsListXaml.Items.OfType<MandatoryColumns>()) 
{ 
    MessageBox.Show(item.MColumnName); 
    MessageBox.Show(item.MColumnName2); 
} 
1

のようなリストを使用することができます。あなたが知っている限り、リストのすべての項目がそのタイプのものであるならば、キャストするときに例外を受け取るべきではありません。

関連する問題