我有问题绑定到LisView ObservableCollection。 问题是只有当我从ObservableCollection中添加/删除项目时,绑定才能正常工作。 但是当我在ObservableCollection中更改一个项目的属性时,ListView仍显示旧值。 我知道这是一个常见的问题,并寻找解决方案,每个人都说我应该使用BindingList而不是ObservableCollectione,因为ObservableCollection不会传播PropertyChanged事件和BindingList。所以我改为了绑定列表,但问题依然存在。WPF,ObservableCollection/BindingList绑定到ListView
类:
public class Network
{
public class Layer : INotifyPropertyChanged
{
public enum ActivFunction { LINEAR, EXPONENTIAL, ARCUSTANGENT }
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
RaisePropertyChanged("Name");
}
}
public ActivFunction Activation { get; set; }
public int Neurons { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(String propertyName)
{
if ((PropertyChanged != null))
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public BindingList<Layer> Layers { get; set; }
public Network()
{
Layers = new BindingList<Layer>();
}
public void AddLayer(Layer layer)
{
if (Layers.Count > 0)
{
int last = Layers.Count;
Layers.Last().Name = "Layer " + last + " (hidden)";
}
Layers.Add(layer);
}
public void RemoveLayer(int index)
{
if(index >= 0 && index < Layers.Count)
Layers.RemoveAt(index);
}
}
绑定:
<ListView Grid.Row="0" x:Name="NetworkListview" ItemsSource="{Binding network.Layers}"
IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridViewColumn Width="100" Header="layer name"
DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Width="60" Header="neurons"
CellTemplate="{StaticResource NeuronsTemplate}"/>
<GridViewColumn Width="110" Header="activation"
CellTemplate="{StaticResource ActivationTemplate}"/>
</GridView>
</ListView.View>
</ListView>
刚要发帖:) – 2011-05-01 08:30:07
这并没有解决问题 – user606521 2011-05-01 10:31:34
没有别的跳出来,因为我害怕显然是错的。只要您在PropertyChanged事件中使用了正确的值,并且您正在使用ObservableCollection,我就看不出问题所在。我在我的博客上提供了一些信息,可以为我自己和同事调试绑定。您可能会发现它有助于获取有关发生的更多信息。这里是http://rtroywest.wordpress。com/2011/03/02/debugging-xaml-bindings/ – 2011-05-01 12:14:23