绑定数据-inotifypropertychanged不起作用
本文关键字:不起作用 -inotifypropertychanged 数据 绑定 | 更新日期: 2023-09-27 18:21:44
我有一个listBox1,其中的数据是从列表绑定的。然后我想当我从listBox1中选择任何项目时,listBox2将绑定来自另一个列表的数据。
private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Teams teams = (Teams)listBox1.SelectedItems[0];
getH2hResults("//td[@class='hell']", teams.Team1, teams.Team2); // add elements to list
getH2hResults("//td[@class='dunkel']", teams.Team1, teams.Team2); // and here also
listBox2.ItemsSource = lists.h2hList;
}
这是第一次工作,但两次listBox2都不显示新数据。
public class Lists : BindableBase
{
public Lists()
{
_teamsList = new List<Teams>();
_h2hList = new List<H2H>();
}
private List<Teams> _teamsList;
public List<Teams> teamsList
{
get
{
return _teamsList;
}
set
{
if (value != _teamsList)
{
_teamsList = value;
RaisePropertyChanged("teamsList");
}
}
}
private List<H2H> _h2hList;
public List<H2H> h2hList
{
get
{
return _h2hList;
}
set
{
if (value != _h2hList)
{
_h2hList = value;
RaisePropertyChanged("h2hList");
}
}
}
}
和XAML
<ListBox Name="listBox1" Width="300" Height="300"
VerticalAlignment="Top"
HorizontalAlignment="Left"
ItemsSource="{Binding teamsList}" SelectionChanged="listBox1_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="#FF4273CD" Text="{Binding Team1, Mode=TwoWay}"></TextBlock>
<TextBlock Text=" vs " FontWeight="Bold"></TextBlock>
<TextBlock Foreground="#FF4273CD" Text="{Binding Team2, Mode=TwoWay}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox Name="listBox2" Grid.Column="1" Width="300" Height="300"
VerticalAlignment="Top"
HorizontalAlignment="Left"
ItemsSource="{Binding h2hList}" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding date, Mode=TwoWay}"></TextBlock>
<TextBlock Text="{Binding result, Mode=TwoWay}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
RaisePropertyChanged("teamList");
是错误的,你的财产被命名为"teamsList",带有S,
更改为:
RaisePropertyChanged("teamsList");
它是您绑定并通知更改的公共财产,
编辑:
同时更改绑定:
ItemsSource="{Binding teamList}"
至
ItemsSource="{Binding teamsList}"
编辑2:
listBox2.DataContext=xxx
非itemsource=xxx
带行(在listBox1_SelectionChanged
中)
listBox2.ItemsSource = lists.h2hList;
您实际上是在从listBox2的ItemsSource
属性中删除绑定。
相反,您应该只更新Lists
类中的h2hList
属性(这可能发生在getH2hResults
中),并从代码中删除上面的行。
但请注意,仅清除并重新填写该列表是不够的。您需要设置h2hList
属性以获得引发的属性更改通知:
var newList = new List<H2H>();
// fill newList before assigning to h2hList property
lists.h2hList = newList;
如果要保留列表并只更改其元素,则需要使用ObservableCollection<H2H>
而不是List<H2H>
作为集合类型。无论如何,这将是更好的方法,因为您不必关心何时将元素添加到新创建的集合中。