DataTrigger на определенный тип - PullRequest
7 голосов
/ 23 февраля 2011

У меня есть сценарий, в котором мне нужно указать такие функции, как

void SomeFunction(int value)

. Для этого я использую два DataGrid s.

  • Слева DataGridФункции
  • Справа DataGrid содержит параметры для выбранной функции

Я хочу, чтобы параметр DataGrid был активирован только тогда, когда в функции выбрана действительная функция DataGrid.Если выбран NewItemPlaceHolder (Последняя строка, когда CanUserAddRows="True" для DataGrid) или если выбор пуст, я хочу, чтобы он был отключен.Я экспериментировал с DataTrigger, но не смог заставить его работать

<Style TargetType="DataGrid">
    <Setter Property="IsEnabled" Value="False"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=functionDataGrid,
                                       Path=SelectedItem}"
                     Value="{x:Type systemData:DataRowView}">
            <Setter Property="IsEnabled" Value="True"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

Можно ли проверить, является ли значение, полученное связыванием, определенным Type?В противном случае, есть ли у кого-нибудь другие решения для этого?На данный момент я обрабатываю это с событием SelectedCellsChanged, но я бы предпочел не использовать код за

Спасибо

Ответы [ 2 ]

7 голосов
/ 23 февраля 2011

Если кто-то сталкивался с той же проблемой, вот что я сделал, чтобы решить ее. Я создал TypeOfConverter, который возвращает Type значения, полученного связыванием.

<DataTrigger Binding="{Binding ElementName=functionsDataGrid,
                               Path=SelectedItem,
                               Converter={StaticResource TypeOfConverter}}"
             Value="{x:Type data:DataRowView}">
    <Setter Property="IsEnabled" Value="True"/>
</DataTrigger>

TypeOfConverter

public class TypeOfConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (value == null) ? null : value.GetType();
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
3 голосов
/ 23 февраля 2011

Рассматривали ли вы DataTemplate для правильной DataGrid (параметры)?

Тогда вы можете привязать DataContext вашей правой DataGrid к SelectedItem левой DataGrid.

И в вашем DataTemplate вы можете сделать свою правую сторону похожей на активную форму ввода параметров DataGrid, если DataTemplate DataType = {x: Type local: FunctionObject}. Когда «FunctionObject» не выбран, вы также можете иметь DataTemplate для этого, который показывает отключенную форму ввода параметра DataGrid, или вы также можете выбрать ничего не отображать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...