DataGridの一部の行を編集可能にし、他の行を編集可能にする必要はありません。
<DataGrid ItemsSource="{Binding Items.View}" AutoGenerateColumns="False" CanUserAddRows="False" >
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Binding="{Binding Timestamp}" Width="Auto" >
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{lex:Loc DateTime}" />
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Value}" Width="Auto" >
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{lex:Loc Value}" />
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
アイテムにプロパティIsEditableを取得しました。そして私はこのようなものが好きです:
<DataGridTextColumn IsReadOnly="{Binding IsEditable, Converter={StaticResource InverseBooleanConverter}}" Binding="{Binding Value}" Width="Auto" >
その間、私はこれがそれほど簡単ではないことを知っています。私の問題に合う解決策を見つけることができませんが。
アップデート
それほど重要ではありませんが、理解を深めるために、ビューモデルからデータを追加します。
private ObservableCollection<MeasuredValue> _last60values;
public ObservableCollection<MeasuredValue> Last60Values
{
get { return _last60values; }
set { _last60values = value; }
}
Items = new CollectionViewSource();
Items.Source = Last60Values;
と私の'MeasuredValue'
namespace PQS.Model
{
public class MeasuredValue : CloneableBaseEntity<MeasuredValue>
{
public DateTime Timestamp { get; set; }
.
.
.
private double _value;
[Range(0.0, double.MaxValue)]
public double Value
{
get { return _value; }
set
{
_value = value;
RaisePropertyChanged("Value");
}
}
private bool _isEditable;
public bool IsEditable
{
get { return _isEditable; }
set
{
_isEditable = value;
RaisePropertyChanged(() => IsEditable);
}
}
}
}