【问题标题】:Binding ListView to filter selected item from another ListView绑定 ListView 以过滤来自另一个 ListView 的选定项目
【发布时间】:2018-03-19 18:12:17
【问题描述】:

我正在开发的 WPF 应用程序中有两个 ListView 项目。在我的应用程序中,它们都连接到Presenter ViewModel 中的Datasets

我最初的想法是将我的SelectedItem 中的ListView 加载到TextBox 中,然后为第二个ListView 关闭过滤器

但是,我遇到了一个问题:我想按数字过滤,而 TextBox 似乎只想接收文本。有解决办法吗?

这是我的 XAML

<Grid Margin="5,2,5,2" Height="350">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <ListView x:Name="TypeView" Grid.Column="0" ItemsSource="{Binding CashActivityTypes}" Margin="0,0,10,0">
        <ListView.View>
            <GridView>
                <!--This is the column I want to get -->
                <GridViewColumn Header="Sequence" DisplayMemberBinding="{Binding Sequence}" Width="75"/>
                <GridViewColumn Header="Activity Type" DisplayMemberBinding="{Binding Type}" Width="200"/>
                <GridViewColumn Header="Description" DisplayMemberBinding="{Binding Description}" Width="Auto"/>
            </GridView>
        </ListView.View>
    </ListView>
    <ListView Grid.Column="1" Margin="10,2,0,2">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Sequence" Width="75"/>
                <GridViewColumn Header="Activity" Width="200"/>
                <GridViewColumn Header="Description" Width="Auto"/>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>
<Grid Margin="5,2,5,2">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <TextBox Text="{Binding SelectedItem.Sequence, ElementName=TypeView, UpdateSourceTrigger=PropertyChanged}" Width="150" HorizontalAlignment="Left"/>
    <Button Grid.Column="1" Content="Adjust Daily Cash Activity" MinWidth="150" Height="20" HorizontalAlignment="Right"/>
</Grid>

【问题讨论】:

  • 嗯,它被称为 TEXT 框是有原因的 :)。也许您可以使用转换器将字符串解析为数字,或者在您的视图模型中进行转换/解析。此外,还有许多数字文本框控件只接受数字。我正在使用 XCeed 工具包:nuget.org/packages/Extended.Wpf.Toolkit,也许这会有所帮助

标签: c# wpf xaml listview textbox


【解决方案1】:

您可以在第一个 listview selectedItem 属性上对 VievModel 进行双向绑定:

private <TYPE> _CashActivityTypeSelected;

public <TYPE> CashActivityTypeSelected 
{
get
 {
   return _CashActivityTypeSelected;
 }
set
{
  _CashActivityTypeSelected=value; 
  FilterMySecondCollectionView(value);
 };

在xml中:

<ListView SelectedItem="{Binding CashActivityTypeSelected, mode=TwoWay}" x:Name="TypeView" Grid.Column="0" ItemsSource="{Binding CashActivityTypes}" Margin="0,0,10,0">
        <ListView.View>
            <GridView>
                <!--This is the column I want to get -->
                <GridViewColumn Header="Sequence" DisplayMemberBinding="{Binding Sequence}" Width="75"/>
                <GridViewColumn Header="Activity Type" DisplayMemberBinding="{Binding Type}" Width="200"/>
                <GridViewColumn Header="Description" DisplayMemberBinding="{Binding Description}" Width="Auto"/>
            </GridView>
        </ListView.View>
    </ListView>

然后在FilterMySecondCollectionView(object t) 中,您可以根据所选对象应用您想要的任何过滤器。

【讨论】:

  • 我只是尝试这样做,但是,调用short TypeSequence,但它没有通过。如何获取单个列?
  • 这样做,您将始终在 CashActivityTypeSelected 属性中拥有当前选定的对象。 CashActivityTypeSelected.Sequence 应该是您的列。
  • 在家里用我正在开发的棒球数据库尝试这个。没有骰子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 2017-09-21
  • 2016-07-23
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
相关资源
最近更新 更多