3

私は WPF と MVVM の完全な初心者なので、このクエリが非常に単純である場合は事前にお詫び申し上げます。オンラインで検索しましたが、自分の要件に合ったものを見つけることができませんでした。だから私はここにいる!

現在、LINQ を使用してデータベースからクエリされたデータのテーブルを実装しようとしています。これは私が実行するクエリです:

DataContext connection = new DataContext();

    var getTripInformation = from m in connection.tblTrips
                where m.TripDate > DateTime.Today
                select new { m.TripID, m.TripName, m.TripDate, m.ClosingDate, m.PricePerAdult, m.PricePerChild, m.Status };

これにより、期待する関連情報が var に入力されます。

今、私ができるようにしたいのは、DataGrid を使用してビューにこれを表示することです。誰でもこれで私を助けることができますか?

4

2 に答える 2

7

簡単に言えば、View と ViewModel が作成されます。ビュー バインディングを容易にするために、ViewModel は INotifyPropertyChanged インターフェイスを実装する必要があります。これは、ViewModel のプロパティを変更したときに発生するイベントを提供するだけです。ビューは、ViewModel のプロパティにバインドされます。これは、ビューの DataContext が ViewModel インスタンスに設定されている限り機能します。以下では、これはコード ビハインドで行われますが、多くの純粋主義者はこれを XAML で直接行います。これらのリレーションシップが定義されたら、LINQ クエリを実行して ObservableCollection (アイテムが内部で追加/削除されたときに INotifyPropertyChanged も実装します) にデータを入力すると、グリッドにデータが表示されます。

ビューモデル

public class MyViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private ObservableCollection<MyRecord> _records = null;
    public ObservableCollection<MyRecord> Records 
    {
        get { return _records; }
        set
        {
            if( _records != value )
            {
                _records = value;

                if( this.PropertyChanged != null )
                {
                    this.PropertyChanged( this, new PropertyChangedEventArgs( "Records" ) );
                }
             }
         }
    }

    public MyViewModel()
    {
        this.Records = new ObservableCollection<MyRecord>();
        this.LoadData();
    }

    private void LoadData()
    {
        // this populates Records using your LINQ query
    }

表示 (コード ビハインド)

public class MyView : UserControl
{
    public MyView()
    {
        InitializeControl();

        // setup datacontext - this can be done directly in XAML as well
        this.DataContext = new MyViewModel();
    }
}

表示 (XAML)

<DataGrid
    ItemsSource="{Binding Path=Records, Mode=OneWay}"
    ...
/>

DataGrid で設定AutoGenerateColumns = 'True'すると、バインドされたアイテム タイプのパブリック プロパティごとに行が作成されます。この値を false に設定した場合は、列とそれらがマップされるプロパティを明示的にリストする必要があります。

于 2012-06-22T13:22:08.153 に答える
0

MVVM を使用してアプリケーションを開発している場合は、次のことを行う必要があります。

  1. ViewModel クラス - UI ロジックを持ち、INotifyPropertyChanged インターフェイスを実装します。DataGrid にバインドされるタイプ コレクションのプロパティを作成する必要があります。そして、このプロパティのセッターで、PropertyChangedEventHandler を呼び出す必要があります。

  2. View の DataContext を、XAML、Codebehind、ViewModel、または一部のメディエーター クラスの ViewModel に設定する必要があります。

于 2012-06-22T12:10:10.033 に答える