基于条件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文件中的数字和日期。在我看来,我有两个列表框…一个是未过期日期和数字,一个是过期日期和数字。
我觉得应该足够简单。
创建两个列表:
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();
注意:
- YourType应该替换为DataType。
- 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在编码时很糟糕。