-1

Silverlight の要素には検証が必要DataGridです。特定の値がコンボ ボックスで選択されている場合、同じ行のチェック ボックス列 ( DataGridCheckBoxColumn) を無効にする必要があります。ただし、私が見る限り、列全体のみを無効にできますが、これは受け入れられません

では、座標 (行、列) がある場合、特定のセルを無効にするにはどうすればよいですか?

PS 同様の質問 -ここは私には合いません。Silverlight 4 には、CellEnter および CellLeave イベントはありません。

4

1 に答える 1

2

答えの一部は次のようになります。

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>
于 2012-12-07T13:36:27.510 に答える