Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定到派生集合的ListView未更新(XAML/Windows 8)_C#_Xaml_Listview_Windows 8_Observablecollection - Fatal编程技术网

C# 绑定到派生集合的ListView未更新(XAML/Windows 8)

C# 绑定到派生集合的ListView未更新(XAML/Windows 8),c#,xaml,listview,windows-8,observablecollection,C#,Xaml,Listview,Windows 8,Observablecollection,我试图通过基于某些标准创建一个可观察集合的“视图”来调整数据。这里有一个简单的例子 我有两个列表视图。一个直接绑定到日期的集合,另一个绑定到DatesAfterToday集合,该集合使用从第一个集合派生,其中(x=>x.Date>DateTime.Today) 当我向我的Dates集合中添加一个新项目时,只有第一个ListView更改。绑定到DatesAfterToday的ListView根本不更新。我曾尝试向viewmodel添加一个PropertyChangedEventHandler,并在

我试图通过基于某些标准创建一个可观察集合的“视图”来调整数据。这里有一个简单的例子

我有两个列表视图。一个直接绑定到
日期的集合
,另一个绑定到
DatesAfterToday
集合,该集合使用
从第一个集合派生,其中(x=>x.Date>DateTime.Today)

当我向我的
Dates
集合中添加一个新项目时,只有第一个ListView更改。绑定到DatesAfterToday的ListView根本不更新。我曾尝试向viewmodel添加一个
PropertyChangedEventHandler
,并在更新日期集合时启动它,但它不起作用

MainPage.xaml

<StackPanel>
    <ListView x:Name="ListOne" ItemsSource="{Binding Dates}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Date}"></TextBlock>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <ListView x:Name="ListTwo" ItemsSource="{Binding DatesAfterToday}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Date}"></TextBlock>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <Button Click="Button_Click_1">Press Me to Add a Date</Button>
</StackPanel>

更新:编辑问题,使其更易于阅读

修改您的
模型
构造函数,如下所示:

public Model()
{
    _Dates = new ObservableCollection<DateTime>();

    _Dates.CollectionChanged += (s, e) =>
        {
            var handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs("DatesAfterToday"));
            }
        };
}
公共模型()
{
_日期=新的ObservableCollection();
_Dates.CollectionChanged+=(s,e)=>
{
var handler=PropertyChanged;
if(处理程序!=null)
{
处理人(此,新属性ChangedEventArgs(“DatesAfterToday”);
}
};
}
问题是,当您从
\u Dates
集合中添加/删除项时,将不会调用setter,这就是为什么不会引发
DatesAfterToday
的属性更改事件的原因

对于集合,WPF还注册了
CollectionChanged
事件,该事件由
INotifyCollectionChanged
接口公开,该接口由
observedcollection
实现。因此,只要修改了
\u Dates
集合,您就可以为
DatesAfterToday
发出通知

public sealed partial class ListTest : Page
{
    public Model model;
    public ListTest()
    {
        this.InitializeComponent();
        model = new Model();
        model.Dates.Add(new DateTime(2012, 11, 12, 0, 0, 0));
        model.Dates.Add(new DateTime(2012, 11, 15, 0, 0, 0));
        model.Dates.Add(new DateTime(2012, 11, 17, 0, 0, 0));
        model.Dates.Add(new DateTime(2012, 11, 20, 0, 0, 0));
        model.Dates.Add(new DateTime(2012, 11, 22, 0, 0, 0));
        this.DataContext = model;
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        model.Dates.Add(new DateTime(2012, 11, 24, 0, 0, 0));
    }
}
public Model()
{
    _Dates = new ObservableCollection<DateTime>();

    _Dates.CollectionChanged += (s, e) =>
        {
            var handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs("DatesAfterToday"));
            }
        };
}