针对特定类型的DataTrigger

9

我有一个场景,需要指定类似以下的函数:

void SomeFunction(int value)

为此,我使用了两个。

  • 左侧的包含函数
  • 右侧的显示所选函数的参数

我只想在选择有效的函数时启用参数。如果选择了NewItemPlaceHolder(当CanUserAddRows="True"时,是的最后一行),或者选择为空,则要禁用。我已经尝试使用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事件处理此问题,但我不想使用代码。

谢谢


你的新项目占位符是什么?你是如何实现它的? - Dan Puzey
@Dan Puzey:当DataGridCanUserAddRows="True"时,在提交到基础集合之前,它是“空”行。 - Fredrik Hedblad
2个回答

15
如果其他人遇到相同的问题,这就是我解决它所做的。 我创建了一个返回绑定生成值类型的Converter。
<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();
    }
}

谢谢你的回答,当我尝试这个时,我得到了一个XamlParseException,说我没有指定DataTrigger的Value...有什么提示吗? - Ignacio Soler Garcia
@SoMoS:在我的例子中,数据被定义为 xmlns:data="clr-namespace:System.Data;assembly=System.Data"。你有包含这个吗? - Fredrik Hedblad
我有一个不同的类型。无论如何,我已将转换器更改为返回类型的全名并在值中使用。谢谢! - Ignacio Soler Garcia

4
您是否考虑过将DataTemplate用于正确的DataGrid(参数)?
然后,您可以将右侧DataGrid的DataContext绑定到左侧DataGrid的SelectedItem。
在DataTemplate中,当DataTemplate的DataType={x:Type local:FunctionObject}时,您可以使右侧看起来像一个启用的DataGrid参数输入表单。当未选择“FunctionObject”时,您也可以为此设置一个DataTemplate,显示禁用的DataGrid参数输入表单,或者您也可以选择不显示任何内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接