繁体   English   中英

Silverlight DataGrid禁用特定单元格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM