我有一个每5秒更新一次的功能。我想保留所选项目,但该项目未被选中。
以下功能每5秒更新一次并更新列表视图中的列表:
C#
public void festJSONUpdateEventHandler()
{
var tempfest = Workspace.This.festStats.Selectedfest;
//REFRESH BINDINGS HERE!!
Workspace.This.festStats.festItems = MainWindow._fest.festData.fest_Items;
Workspace.This.festStats.Selectedfest = tempfest;
}
XAML
<DataTemplate>
<StackPanel Orientation="Vertical">
<ListView x:Name="lvfest" ItemsSource="{Binding festItems}" SelectedItem="{Binding Selectedfest, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True" >
<ListView.View>
<GridView>
<GridViewColumn Width="100" DisplayMemberBinding="{Binding id}" >
<GridViewColumn.Header>
<GridViewColumnHeader Tag="ID" Click="lvfestColumnHeader_Click">ID</GridViewColumnHeader>
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn Width="100" DisplayMemberBinding="{Binding formatType}" >
<GridViewColumn.Header>
<GridViewColumnHeader Tag="Format" Click="lvfestColumnHeader_Click">Format</GridViewColumnHeader>
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn Width="100" DisplayMemberBinding="{Binding modifiedIso8601}" >
<GridViewColumn.Header>
<GridViewColumnHeader Tag="Date" Click="lvfestColumnHeader_Click">Date</GridViewColumnHeader>
</GridViewColumn.Header>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</StackPanel>
</DataTemplate>
更多C#
class festViewModel : ToolViewModel
{
public festItem _selectedfest;
public festItem Selectedfest
{
get { return _selectedfest; }
set
{
if (_selectedfest != value)
{
_selectedfest = value;
RaisePropertyChanged("Selectedfest");
}
}
}
private List<festItem> _festItems;
public List<festItem> festItems
{
get { return _festItems; }
set
{
if (_festItems != value)
{
_festItems = value;
RaisePropertyChanged("festItems");
}
}
}
}
答案 0 :(得分:1)
来自评论:
我有一个提取JSON数据的库,在那里有一个列表 称为fest_Items的对象。从这个列表中,我发送对象 festItems列在festViewModel中,它绑定到我的列表视图。
是否在每个函数调用(ergo 5秒)重新创建列表?可能是因为您的商品不包含与对象相同的引用。
共享相同值的两个或多个对象可能不是相同的引用。如果要重新创建列表,则可能是绑定无法检索项目的原因。
作为解决方案,我建议找到一个唯一的属性(比如模型的ID属性)并在新创建的列表中搜索该项。
例:
public void festJSONUpdateEventHandler()
{
var tempfestID = Workspace.This.festStats.Selectedfest.ID;
//REFRESH BINDINGS HERE!!
Workspace.This.festStats.festItems = MainWindow._fest.festData.fest_Items;
// Find the first festStat that has the same ID as the old selected one.
Workspace.This.festStats.Selectedfest = Workspace.This.festStats.FirstOrDefault(x => x.ID == tempfestID);
}
如果它不起作用,请告诉我。