Кнопка включения, когда строка выбрана в DataGrid с использованием Expression Blend?

#silverlight #expression-blend

#silverlight #выражение-blend

Вопрос:

Как указано, я хочу включить кнопку a (которая была отключена) при выборе строки из DataGrid (то есть объекта).

Из того, что я прочитал, у WPF, похоже, есть триггеры для проверки при изменении свойства centain, он может делать что-то вроде centain?

Но в Silverlight, похоже, я могу использовать только GoToState вместо этого. Я попытался создать два состояния: выбранное и невыбранное. Но свойство IsEnabled для кнопки, похоже, не записывается из невыбранного состояния в выбранное состояние…

И еще одна проблема заключается в том, что единственное событие, которое подходит из DataGrid, — это SelectionChanged, но как мне убедиться, что пользователь выбрал строку?

Если я сделаю все в code-behide, я могу проверить SelectionChangedEvent и включить кнопки, но есть ли способ сделать все, что указано выше, с помощью Expression Blend? Я пытаюсь поместить все в xaml как можно больше.

Спасибо

Ответ №1:

Вы пробовали использовать обычную привязку элементов? Например:

 <DataGrid x:Name="MyGrid" />
<Button IsEnabled="{Binding Path=SelectedItem, ElementName=MyGrid, Converter={StaticResource MyNullToBoolConverter}}" />
  

и пример конвертера:

 class MyNullToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value != null ? true : false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
  

Все, что вам нужно сделать, это объявить конвертер в статических ресурсах страницы или кнопки.

Комментарии:

1. О, я понимаю. Значит, Expression blend не поддерживает такие вещи изначально? Я имею в виду, как без написания конвертера или кода?

2. @King, я не специалист по выражениям, я делаю весь свой XAML непосредственно в VS (поэтому я не могу сказать, обладает ли Expression такой способностью или нет). Вероятно, вы могли бы также сделать это с помощью DataTrigger или какого-либо поведения, я просто показал самый быстрый способ добиться того, чего вы хотите. Так или иначе вам придется использовать конвертер или выражение, поскольку наличие или отсутствие объекта в SelectedItem должно быть приравнено к логическому значению.