1

ReactiveUI を使い始めたばかりです。基本的に、クエリの結果をグリッドに入力しています。現在、私のビューモデルは次のようになっています。

 public class QueryViewModel : ViewModelBase 
{

    private readonly ResultSet _resultSet = null;

    public ReactiveCollection<GridColumn> Columns { get; private set; }
    public ReactiveCollection<GridRow> Rows { get; private set; }

    public QueryViewModel()
    {
        _resultSet = ... run query

        Columns = new ReactiveCollection<GridColumn>(from c in _resultSet.Columns select new GridColumn(c));
        Rows = new ReactiveCollection<GridRow>(from r in _resultSet.Rows select new GridRow(r));

        //Rows = new ReactiveCollection<GridRow>();
        //_resultSet.ObservableRows
        //          .Subscribe(r => Rows.Add(new GridRow(r)));                     

    }    
}

ご覧のとおり、IEnumerable を使用してデータを入力するときに動作させることができますが、コメントアウトされたビットから、IObservable からデータを入力する方法がよくわからないことがわかります。

誰かが私を正しい方向に向けることができれば、お願いします。

編集:

完全な開示のために、ここで間違いを犯した場合に備えて、ObservableRows の実装を含めました。

Return Observable.Create<Row>((o) => {
             var cn = New SqlConnection(connection);
             var cmd = New SqlCommand(sql, cn);
             var asyncReader = Observable.FromAsyncPattern<SqlDataReader>(cmd.BeginExecuteReader, cmd.EndExecuteReader);
             IDisposable subscription;
             Try {
                cn.Open();
                subscription = asyncReader().Subscribe(rdr => PublishRows(rdr, o, columns));
             }
             Catch Exception ex {
                o.OnError(ex);
             }

             Return Disposable.Create(() => { 
                  subscription.Dispose();
                  cmd.Dispose();
                  cn.Close();
                  cn.Dispose();
             });
}

多くのthx

S

4

1 に答える 1

3

どうですか:

Rows = _resultSet.ObservableRows.CreateCollection();
于 2013-02-03T00:14:08.980 に答える