Как правильно включить / отключить управление в сетке данных? - PullRequest
1 голос
/ 14 августа 2010

Я новичок в 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>

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

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

1 Ответ

2 голосов
/ 14 августа 2010

Наиболее вероятная проблема, с которой вы столкнулись, заключается в том, что объект, к которому привязана строка, не реализует 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));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...