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

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

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

Экран правильный при первоначальном отображении. Кнопка «ShowDetails» неактивна, если не установлен исходный флажок «Переопределить». Когда я устанавливаю флажок «Переопределено», «overriddenFlag» изменяется, однако кнопка «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>

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

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


person Karen    schedule 14.08.2010    source источник


Ответы (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));
        }
    }
}
person AnthonyWJones    schedule 14.08.2010
comment
Спасибо, это помогло! Вы действительно помогли мне в обучении - большое вам спасибо. - person Karen; 14.08.2010
comment
К вашему сведению: последний комментарий на случай, если кто-то еще окажется в таком же затруднительном положении. Я пробовал использовать INotifyPropertyChanged, но это не сработало. Подозреваю, что у меня не было режима = Двухсторонний. Так что еще раз спасибо за то, что помогли собрать кусочки пазла на свои места. - person Karen; 14.08.2010