私はDataTable
を埋め込み、DataGrid
にバインドしています。MVVMの手法に従って読み込み専用のセルを設定する方法を知りたいです。MVVMのDatagridにバインドされたDatatableの読み込み専用セルを設定する
私のDataGrid:
<DataGrid ItemsSource="{Binding oTable, Mode=TwoWay}" CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="True" ColumnWidth="*">
私はそれを行う方法がわかりません。私はbool
をreadonlyプロパティにバインドするか、DataTable
を埋め込むときに何か他のことを行う必要がありますか?助言する
感謝;)
EDIT 1:
私はruningて時間の間にそれを埋めるために、列が動的に生成されていことができるようにできるようにするデータグリッドにバインドさDATATABLEを使用しますが、あなたがそれを可能にする他の解決策を持っているなら、私はそれを試してみてうれしいです。
EDIT 2: これは私がDataTable
を埋める方法です。 私が入れたデータは階層構造になっています(コンポジットデザインパターン(コンポジットとアトリビュートが葉っぱです)、いくつかのアトリビュートを持つ要素だけを置くので、各リーフに属性isEditable
があります。次のコードは、それがattr.isEditable();
にアクセスすることができます。
private void getNewData(List<ElementBaseViewModel> rootElement)
{
_oTable.Clear();
foreach (var element in rootElement)
{
buildFromChildren(element);
}
var tempTable = _oTable;
_oTable = null;
RaisePropertyChanged("oTable");
_oTable = tempTable;
RaisePropertyChanged("oTable");
}
private void buildFromChildren(ElementBaseViewModel element)
{
if(element.Children != null)
{
if (isAttributeChildren(element))
{
DataRow oRow = _oTable.NewRow();
foreach (var attribute in element.AttributeChildren)
{
Model.Attribute attr = (Model.Attribute)attribute.Element;
if (!_oTable.Columns.Contains(attr.name))
_oTable.Columns.Add(attr.name);
oRow[attr.name] = attr.Value;
}
_oTable.Rows.Add(oRow);
}
foreach (var elem in element.ElementChildren)
{
buildFromChildren(elem);
}
}
}
私はMM8によって提案された解決策を理解するが、私は編集を無効にするisEditable
をバインドする方法を理解していない。あなたは、たとえばAutoGeneratingColumn
イベントを処理することができ
私はあなたが細胞を言う知っているが、それは特定の細胞ですか読み込み専用にする列? – stuicidle
細胞。私はそれらのいくつかを読むだけにする必要があります。 – Ant4r