1

ShQuCollectionWPFアプリには、データバインディングを介してObservableCollectionに接続されているListViewがあります。

<ListView Name="ShSelList" ItemsSource="{Binding Source={StaticResource myDataSource},Path=ShQuCollection}" SelectionChanged="ShSelList_SelectionChanged">
   <ListView.View>
       <GridView>
         <GridViewColumn Header="Code" DisplayMemberBinding="{Binding StrCode}"/>
         <GridViewColumn Header="Date" DisplayMemberBinding="{Binding Date}"/>
         <GridViewColumn Header="Time" DisplayMemberBinding="{Binding Time}"/>
        </GridView>
   </ListView.View>
</ListView>

ListView SelectionChangedイベントハンドラーの内部から、メソッドを呼び出して、ObservableCollectionの選択された行のフィールドの1つから取得する文字列パラメーターを渡す必要があります ShQuCollection

ListView SelectionChangedイベントハンドラー内からObservableCollectionを参照するにはどうすればよいですか?

private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ...?????
    }

編集(追加):

私のObservableCollectionは別のウィンドウの分離コードファイルにあり、Window.Resources宣言を使用してそれに到達します。

<Window.Resources>
    <c:ShWindow x:Key="myDataSource"/>
</Window.Resources>

そして、ObservableCollectionは次のようになります。

        ObservableCollection<ShsQu> _ShQuCollection =
            new ObservableCollection<ShsQu>();

    public ObservableCollection<ShsQu> ShQuCollection
    { get { return _ShQuCollection; } }

    public class ShsQu
    {
        public string StrCode { get; set; }
        public string Date { get; set; }
        public string Time { get; set; }
    }
4

2 に答える 2

1

ModelViewがビューに接続されていると想定しています。意味ShQuCollectionは、ModelView内のパブリックプロパティである必要があります。ModelViewObservableCollectionを介してにアクセスする必要があります。

アップデート:

変更が必要なレコードに到達するには、listViewから現在のselectedIndexを取得します。

private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   string s = ShQuCollection[ShSelList.SelectedIndex].StrCode;
}

注:将来的には、MVVMアプローチを使用する方がクリーンになります。

于 2010-01-08T16:47:56.427 に答える
0

コードビハインドでは、リストビュー(SsSelList)の選択されたアイテムプロパティをShsQuオブジェクトにキャストし、そのオブジェクトのプロパティにアクセスしてメソッドを呼び出すことができるはずです。

ShSQu obj = SsSelList.SelectedItem  as ShSQu;
// Then call the method using the object properties
MethodToCall(obj.StrCode);

これは機能するはずですが、これを行うにはあまりクリーンな方法ではないため、MVVMパターンを使用することをお勧めします。MVVMを使用している場合は、コレクションをビューモデルに保存し、ビューモデル内の現在のアイテムを追跡します。このようにして、ビューモデルで発生したコマンドはすべて現在のアイテムにアクセスできます。

Josh Smithは、さらに読みたい場合は、ここ(http://msdn.microsoft.com/en-us/magazine/dd419663.aspx)でMVVMを紹介しています。

于 2010-01-08T17:33:34.900 に答える