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