[英]Silverlight datagrid disable particular cell
silverlight的DataGrid
元素中必须有一个验证:如果在组合框中选择了特定值,则必须禁用同一行上的复选框列( DataGridCheckBoxColumn
)。 但是,从我的角度来看,我只能禁用整个列,这是不可接受的 。
因此,如果我有一个特定的单元格(行,列),如何禁用它?
PS类似的问题- 这不适合我。 silverlight 4中没有CellEnter和CellLeave事件 。
答案的一部分可能是:
private void DisableCheckboxColumnInRow(DataGridRow row)
{
var checkBoxColumn = Datagrid1.Columns[0];
var checkBoxCell = GetCell(checkBoxColumn, row);
checkBoxCell.IsEnabled = false;
}
private static DataGridCell GetCell(DataGridColumn column, DataGridRow row)
{
var cellContent = column.GetCellContent(row);
return (DataGridCell)cellContent.Parent;
}
但是,也许我可以使用MVVM更好地做到这一点:
ViewModel部分:
public class TestItem : INotifyPropertyChanged
{
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set
{
_isChecked = value;
OnPropertyChanged("IsChecked");
}
}
private bool _canBeChecked;
public bool CanBeChecked
{
get { return _canBeChecked; }
private set
{
_canBeChecked = value;
OnPropertyChanged("CanBeChecked");
}
}
private string _selectedValue;
public string SelectedValue
{
get { return _selectedValue; }
set
{
_selectedValue = value;
OnPropertyChanged("SelectedValue");
// here we do the 'magic':
CanBeChecked = SelectedValue != "one";
}
}
public IEnumerable<string> PossibleValues
{
get
{
yield return "one";
yield return "two";
yield return "free";
}
}
#region Implementation of INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
查看部分:
<Controls:DataGridTemplateColumn>
<Controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding PossibleValues}" SelectedItem="{Binding SelectedValue,Mode=TwoWay}" />
</DataTemplate>
</Controls:DataGridTemplateColumn.CellTemplate>
</Controls:DataGridTemplateColumn>
<Controls:DataGridTemplateColumn>
<Controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked,Mode=TwoWay}" IsEnabled="{Binding CanBeChecked}" />
</DataTemplate>
</Controls:DataGridTemplateColumn.CellTemplate>
</Controls:DataGridTemplateColumn>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.