在wpf中从dataGrid搜索数据时出错

时间:2013-05-27 18:09:00

标签: wpf search datagrid textbox

我尝试使用以下XAML

搜索dataGrid
<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>

我是从here

得到的

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

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

线上的另一个错误没有。 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>

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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