2011-02-23 81 views
7

我有一种情况,我需要像DataTrigger对特定类型的

void SomeFunction(int value) 

为了这个,我用两个DataGrid S指定功能。

  • DataGrid保存功能
  • DataGrid适用于所选择的功能

我只想参数DataGrid当在功能DataGrid选择一个有效的功能启用参数。如果NewItemPlaceHolder(最后一行CanUserAddRows="True"DataGrid被选中,或者如果选择是空的,我希望它被禁用。我experimentet与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事件,但我不会用背后

感谢

+0

什么是你的新项目的占位符?你是如何实现它的? – 2011-02-23 13:53:57

+0

@Dan Puzey:当'DataGrid'的'CanUserAddRows =“True”'被提交到底层Collection之前,它是“空行” – 2011-02-23 13:57:59

回答

7

如果其他人遇到同样的问题,这是我做了什么来解决它。我创建了一个TypeOfConverter,它返回Binding生成的值的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(); 
    } 
} 
+0

感谢您的回答,当我尝试这个时,我得到一个XamlParseException,说我没有指定DataTrigger的值...任何提示? – 2011-08-17 10:27:06

+0

@SoMoS:在我的例子中,数据被定义为'xmlns:data =“clr-namespace:System.Data; assembly = System.Data”'。你有包括这个吗? – 2011-08-17 10:35:58

+0

我有一个不同的类型。无论如何,我已经更改了Converter以返回该类型的全名并在Value处使用该名称。谢谢! – 2011-08-17 10:45:38

3

你有没有考虑为正确的DataGrid(参数)一个DataTemplate代码更喜欢哪个?

然后,您可以将正确的DataGrid的DataContext绑定到左侧DataGrid的SelectedItem。

并且在DataTemplate中,当DataTemplate的DataType = {x:Type local:FunctionObject}时,可以使右侧看起来像启用的DataGrid参数条目窗体。当没有选择'FunctionObject'时,你可以为其提供一个DataTemplate,它显示一个禁用的DataGrid参数输入表单,或者你也可以选择不显示任何内容。

+0

谢谢,这真是一个非常好的主意!我会尝试一下! – 2011-02-23 15:03:36