1

我尝试dataGrid使用以下 XAML进行搜索

<DataGrid x:Name="grid" local:DataGridTextSearch.SearchValue="{Binding ElementName=SearchBox, Path=Text, UpdateSourceTrigger=PropertyChanged}" 
          ItemsSource="{Binding TestData}" >
    <DataGrid.Resources>
        <local:SearchValueConverter x:Key="SearchValueConverter" />
        <Style TargetType="{x:Type DataGridRow}">
            <Setter Property="local:DataGridTextSearch.IsTextMatch">
                <Setter.Value>
                    <MultiBinding Converter="{StaticResource SearchValueConverter}">
                        <Binding RelativeSource="{RelativeSource Self}" Path="DataContext.MyProperty" />
                        <Binding RelativeSource="{RelativeSource Self}" Path="(local:DataGridTextSearch.SearchValue)" />
                    </MultiBinding>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="local:DataGridTextSearch.IsTextMatch" Value="True">
                    <Setter Property="IsSelected" Value="True" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Resources>
</DataGrid>

我从这里得到的

但这给了我一个DataGrid未定义的错误。所以我<DataGrid>改为<my:DataGrid>

现在它在第 1 行给了我以下错误:在 DataGridTextSearch 类型中找不到可附加属性 SearchValue。

和第 1 行的另一个错误。3:未找到类型 local:SearchValueConverter。确认您没有丢失程序集引用并且所有引用程序集都已构建。

我的窗口的 XAML 看起来像:

<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="532" xmlns:my="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit">
    <Grid>
        <TextBox Height="29" Margin="104,22,147,0" Name="txt" VerticalAlignment="Top" AutoWordSelection="True" />
        <my:DataGrid x:Name="grid" local:DataGridTextSearch.SearchValue="{Binding ElementName=SearchBox, Path=Text, UpdateSourceTrigger=PropertyChanged}" 
              ItemsSource="{Binding TestData}" >
            <my:DataGrid.Resources>
                <local:SearchValueConverter x:Key="SearchValueConverter" />
                <Style TargetType="{x:Type DataGridRow}">
                    <Setter Property="local:DataGridTextSearch.IsTextMatch">
                        <Setter.Value>
                            <MultiBinding Converter="{StaticResource SearchValueConverter}">
                                <Binding RelativeSource="{RelativeSource Self}" Path="DataContext.MyProperty" />
                                <Binding RelativeSource="{RelativeSource Self}" Path="(local:DataGridTextSearch.SearchValue)" />
                            </MultiBinding>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="local:DataGridTextSearch.IsTextMatch" Value="True">
                            <Setter Property="IsSelected" Value="True" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </my:DataGrid.Resources>
        </my:DataGrid>
    </Grid>
</Window>
4

1 回答 1

2

你搞砸了命名空间、引用和(我猜)Resharper。首先 - 无需为 DataGrid 指定命名空间 - 它是标准控件,因此如果无法识别 - 您可能真的错过了项目引用中的一些程序集。

然后 - 检查你的命名空间 - 我猜 x:Class="Window1" 是错误的,因为通常那里有项目命名空间前缀。

第三,在使用任何命名空间之前,包括“local”,你需要先定义它,比如 xmlns:local="clr-namespace:your namespace goes here",所以 local:DataGridTextSearch 和类似的表达式在你这样做之前不会起作用.

最后,在继续修复 XAML 警告之前构建您的解决方案 - 通常,如果您做的一切正确,它们会在构建后消失。

我建议 - 创建一个新的空 WPF 应用程序项目,从您提到的帖子中复制所有代码(包括代码隐藏)并检查您的问题是否仍然存在。

于 2013-05-27T20:22:57.307 回答