我有問題綁定到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