【问题标题】:Mahapps : ScrollViewer update list on event KeyDown in WPF ( C # )Mahapps : WPF (C#) 中事件 KeyDown 的 ScrollViewer 更新列表
【发布时间】:2016-02-10 15:17:07
【问题描述】:

我有一个无法解决的问题。

正如你在图片中看到的,有一个标签,一个文本框和一个滚动查看器。

现在,当用户搜索文本框时,我必须更新 ScrollViewer。 每次按下按键时的事件的一部分。

所以如果我写 Statut ... 应该放在文件列表的第一个名称为“statuto rai”

列表可以有 N 个元素

图片列表:

Xaml 代码:

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="25"></RowDefinition>
            <RowDefinition Height="25"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0" Background="GhostWhite"/>
        <Grid Grid.Row="1" Background="Gray"/>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">Documenti allegati</TextBlock>
        <Border Grid.Row="1" Margin="3" BorderBrush="White" Height="22" Background="#fff">
            <TextBox BorderBrush="#465E76" KeyDown="TextBox_KeyDown" BorderThickness="0" FontSize="10" Background="#fff" Foreground="#565656" controls:TextBoxHelper.Watermark="Ricerca Locale" FontFamily="{StaticResource Lato Thin}"  HorizontalContentAlignment="Center" ></TextBox>
        </Border>
        <ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Hidden" PanningMode="Both" Name="scrollDocuments">
            <ItemsControl ItemsSource="{Binding Path=attachmentsList}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Grid.Column="0" Grid.Row="0">
                            <Button Grid.ColumnSpan="2">
                                <Button.Template>
                                    <ControlTemplate TargetType="{x:Type Button}">
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="450"></ColumnDefinition>
                                            </Grid.ColumnDefinitions>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="60"/>
                                            </Grid.RowDefinitions>
                                            <Grid Grid.Row="0" Background="#fff"></Grid>
                                            <TextBlock Foreground="#565656" FontFamily="{StaticResource Lato Semibold}" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="10" Margin="10,3,0,0" Style="{DynamicResource Lato-Semibold}" Text="{Binding contList}"/>
                                            <Image Source="/Resources/Images/icon-document-browser.png" HorizontalAlignment="Left" Margin="22,-12,0,0" Width="22"/>
                                            <TextBlock Foreground="#565656" FontFamily="{StaticResource Lato Semibold}" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="10" Margin="21,32,0,0" Style="{DynamicResource Lato-Semibold}" Text="{Binding FileSizeConverted}"/>
                                            <TextBlock Foreground="#565656" FontFamily="{StaticResource Lato Semibold}" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="12" Margin="55,-10,0,0" Style="{DynamicResource Lato-Semibold}" Text="{Binding Name}"/>
                                            <TextBlock Foreground="#565656" FontFamily="{StaticResource Lato Semibold}" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="12" Margin="55,-10,10,0" Style="{DynamicResource Lato-Semibold}" Text="{Binding ModifiedDate}"/>
                                            <TextBlock Foreground="#565656" FontFamily="{StaticResource Lato Semibold}" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="10" Margin="55,25,10,0" FontWeight="Bold" Style="{DynamicResource Lato-Semibold}" Text="Nessuna copia locale"/>
                                            <Border Grid.Row="0" Grid.ColumnSpan="2" BorderBrush="#DDD" BorderThickness="0,0,0,1"></Border>
                                        </Grid>
                                    </ControlTemplate>
                                </Button.Template>
                            </Button>
                        </StackPanel>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </ScrollViewer>
        <Viewbox Grid.Row="2" Name="testoNessunAllegato" Visibility="Collapsed" Margin="20">
            <TextBlock Text="Nessun allegato disponibile."></TextBlock>
        </Viewbox>
    </Grid>

CodeBehind 事件代码:

private void TextBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            string find = ((TextBox)sender).Text;
            attachmentsList = attachmentsList.Where(x => x.Name == find).ToList();
            InitializeComponent();
        }

在实践中我进行智能研究,所以每次我插入一个字母过滤列表,然后再次打印,当然是实时的。

我希望我自己解释一下。

谢谢

【问题讨论】:

    标签: c# wpf xaml mahapps.metro


    【解决方案1】:

    我看到你使用绑定,在这种情况下,有一个更好的东西可以达到你的目标。它是 CollectionView。

    这是一个简单的应用程序,或多或少满足您的要求:

    查看

    <StackPanel Orientation="Horizontal">
        <Label Content="Search" />
        <TextBox MinWidth="30" Text="{Binding FilterText, UpdateSourceTrigger=PropertyChanged}" />
    </StackPanel>
    <ListBox ItemsSource="{Binding Data}" />
    

    UpdateSorceTrigger=PropertyChanges 每次按下任意键时都会更新 ViewModel 中的 FilterText。 数据是一个ICollectionView

    视图模型

    public ICollectionView Data { get; private set; }
    
    ...
    // Create default view for the list
    Data = CollectionViewSource.GetDefaultView(list);
    // Set filter delegate for CollectionView
    Data.Filter = FilterData;
    
    ....
    private bool FilterData(object obj)
    {
            DataContainer cont = (DataContainer)obj;
            return string.IsNullOrEmpty(FilterText) || cont.Name.StartsWith(FilterText, StringComparison.OrdinalIgnoreCase);
    }
    
    private string myfiltertext;
    public string FilterText
    {
        get { return myfiltertext; }
        set
        {
            myfiltertext = value;
            // Refresh collection view after Filter text modification
            Data.Refresh();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多