基于条件MVVM对项目进行分组的两个列表框

本文关键字:两个 列表 条件 于条件 MVVM 项目 | 更新日期: 2023-09-27 18:14:06

我以一种熟悉的方式设置了两个列表框:

<ListBox HorizontalAlignment="Left" Margin="78,35,0,-32" Grid.Row="1" Width="300" ItemsSource="{Binding ListOfItems}" Grid.RowSpan="3" >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Number}" />
                                <TextBlock Text="{Binding Date, StringFormat={}{0:MM/dd/yy}}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

一个列表框用于未过期日期,它是各自的,另一个列表框用于过期日期,它是各自的编号。

我想知道如何调整我的条件或属性以正确绑定,以便属性仅在满足条件时绑定。

我已经尝试了下面的条件,但无论是所有的日期(无论过期或不绑定到第一个列表框)或我的属性不正确绑定。

我想看一个如何设置的例子。

这是我的视图模型中的条件示例。

ListInformation tempList = new ListInformation();
if (DateTime.Compare(Date, DateTime.Now) > 0)
{
    Date = tempList.Date;
    Number = tempList.Number; 
}
else if (DateTime.Compare(Date, DateTime.Now) < 0)
{
    Exp_Date = tempList.Date;
    Exp_Number = tempList.Number; 
}
编辑:

那么,这是我当前的设置。

我有一个xml文件,当用户单击导入按钮时读取。我有一个类/模型,它从xml中剥离出所有关键项并将它们保存到数据库中。我只想在视图的列表框中显示该xml文件中的数字和日期。在我看来,我有两个列表框…一个是未过期日期和数字,一个是过期日期和数字。

基于条件MVVM对项目进行分组的两个列表框

我觉得应该足够简单。

创建两个列表:

List<YourType> ListExpiry = new List<YourType>();
List<YourType> ListNonExpiry = new List<YourType>();

然后根据日期添加项目:

ListExpiry = YourSource.Where(x => x.Date > DateTime.Now).Select(x => x)ToList();
ListNonExpiry = YourSource.Where(x => x.Date < DateTime.Now).Select(x => x)ToList();

注意:

  1. YourType应该替换为DataType。
  2. YourSource应该被Source of Data取代。

在XAML中:

For First ListBox:

ItemsSource="{Binding ListExpiry}"

For Second ListBox:

ItemsSource="{Binding ListNonExpiry}"

更新:

在你的MainViewModel中:

public static List<YourType> ListExpiry = new List<YourType>();
public static List<YourType> ListNonExpiry = new List<YourType>();

你想设置值的地方(像这样称呼它):

MainViewModel.ListExpiry = .....
MainViewModel.ListNonExpiry = .....

在App.xaml文件中:

<yourNamespacePrefix:MainViewModel x:Key="MainViewModelResource" />

<Self:MainWindowViewModel x:Key="mainWindowViewModel" />

还需要更改XAML文件中的dataContext,如:

<Window ............. DataContext="{StaticResource MainViewModelResource}" />

取决于日期集合的填充方式。

我将创建两个集合并分别绑定到它们。在getter中添加条件…
public ICollection<listType> ExpiredDates{ get { return from p in source where p.Date < DateTime.Now select;}}

然后当你的日期被填充时,调用PropertyChanged在这些属性上通知视图更新。您可能还需要一个占位符集方法。

OnPropertyChanged("ExpiredDates");

原谅代码质量,ipad在编码时很糟糕。