小编K J*_*K J的帖子

从.Net程序集中翻译XAML

有没有办法从程序集中获取Xaml的详细信息?

.net wpf xaml

17
推荐指数
1
解决办法
7602
查看次数

在MVVM(WPF)应用程序中更改ListView上的过滤器后,如何ScrollIntoView?

我在VM中有一个ObservableCollection,它显示在ListView的视图中.当所选项更改时,SelectionChanged事件将很好地触发.以下是我配置ListView的方法:

<ListView Grid.Row="3" Margin="5" AlternationCount="2" Name="_lvSettings" 
          IsSynchronizedWithCurrentItem="True"
          ItemsSource="{Binding Path=CollectionView}" 
          SelectedIndex="{Binding Path=SelectedSettingIndex}"
          SelectionChanged="OnSelectionChanged"  >
    <ListView.View>
        <GridView>
            <GridViewColumn Width="170" 
                            Header="{Binding Path=ShowAllDisplay}"
                            x:Name="_colSettings"  
                            DisplayMemberBinding="{Binding Path=Setting}"/>
            <GridViewColumn Header="Old Value" Width="150" 
                            DisplayMemberBinding="{Binding Path=OldVal}"/>
            <GridViewColumn Header="New Value" 
                            DisplayMemberBinding="{Binding Path=NewVal}" />
        </GridView>
    </ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是当我更改集合上的过滤器时.所选项目保持不变,这很好,但ListView会更改为从第一个项目显示,并且通常所选项目不在视图范围内(但仍然是所选项目).

在VM中,我有属性"SelectedSettingIndex",它在更改时抛出PropertyChanged事件.即使我提出了自己的事件手动(base.OnPropertyChanged("SelectedSettingIndex");)从虚拟机时更换过滤器,似乎事件不会真正引起人们的关注与物业并没有真正改变.必须有一个方法来调用ScrollIntoView或在这种情况下类似的东西,但我无法找出正确的事件或者触发这样做.我错过了什么?

编辑

以下是我关注的问题的一个,希望更好的描述:

1)我在VM中使用CollectionViewSource来过滤数据.

2)有一个按钮供用户在过滤器之间切换.

3)让我们假设ListView有空间在任何给定时间显示最多10个项目.

4)用户在列表视图中的索引50处的过滤视图中选择项"A".

5)然后用户单击该按钮以关闭过滤.

预期结果:ListView控件填充了未经过滤的名单,项目"A"保持选中状态,并且ListView的是"滚动",使得项目"A"仍是可见的.

实际结果:ListView中填充了未过滤的列表中,项"A"保持被选择,并且所述的ListView为"滚动"到顶部,示出第一10项.项目"A"不在视野中.

c# wpf listview filter mvvm

4
推荐指数
1
解决办法
3490
查看次数

标签 统计

wpf ×2

.net ×1

c# ×1

filter ×1

listview ×1

mvvm ×1

xaml ×1