Как правильно включить / отключить управление в датагрид?

Я новичок в Silverlight, поэтому я не знаю, очевидно это или нет.

У меня есть сетка данных, где первый столбец флажок (названный «Переопределенный»). Второй столбец (с именем «ShowDetails») представляет собой кнопку, которая позволяет пользователю развернуть строку, чтобы увидеть вложенную сетку. Если флажок «Переопределено» не установлен, кнопка «ShowDetails» должна быть отключена.

Экран правильный при первоначальном отображении. Кнопка «ShowDetails» отключена, если не установлен начальный флажок «Переопределено». Когда я проверяю флажок «Переопределено», «переопределенный флаг» изменяется, однако кнопка «ShowDetails» остается отключенной, вместо того, чтобы переключаться на «включена».

Почему флаг «IsEnabled» кнопки «ShowDetails» не изменяется?

Вот 2 столбца из xaml

        <sdk:DataGrid.Columns>

            <sdk:DataGridTemplateColumn Header="Overridden">
              <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                  <CheckBox IsChecked="{Binding OverriddenFlag,Mode=TwoWay}"
                            Click="Overridden_Click"
                            HorizontalAlignment="Center"
                        />
                </DataTemplate>
              </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>

            <sdk:DataGridTemplateColumn>
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                      <Button x:Name="ShowDetails" 
                          FontWeight="bold" FontSize="12"
                          Content="+" Click="ShowDetails_Click" 
                          IsEnabled="{Binding OverriddenFlag, Mode=OneWay}"
                                />
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>

Как правильно включить / отключить кнопку в сетке данных программно?

I» Я пытался сделать множество вещей, которые я видел здесь, в Переполнении стека, таких как INotifyProperty, конвертер для скрытия кнопки (который не показывал кнопку, когда я установил флажок), и я пытался сделать вещи в функции Overridden_Click, такие как FindName (), но безуспешно.

1
задан AnthonyWJones 14 August 2010 в 06:46
поделиться

1 ответ

Наиболее вероятная проблема заключается в том, что объект, к которому привязана строка, не реализует INotifyPropertyChanged . Без реализации этого интерфейса ваша кнопка не сможет узнать об изменении, внесенном флажком в свойство OverriddenFlag .

Вот пример того, как это делается: -

public class MyClass : INotifyPropertyChanged
{

    private bool _overriddenFlag;
    public bool OverriddenFlag
    {
        get { return _overriddenFlag; }
        set
        {
            _overriddenFlag= value;
            NotifyPropertyChanged("OverriddenFlag");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }
}
2
ответ дан 2 September 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: