ObservableCollectionを使用して問題が発生しました。特に、UIにグリッドを更新しないアイテムが追加されました。 Date
とMinute
:あなたは、私は次のバインディングを持つ2つの列を持つグリッドをした見ることができますどのようにObservableCollection - UIを更新できません。
<ListView ItemsSource="{Binding Playing}">
<ListView.View>
<GridView>
<GridViewColumn Header="Data" Width="150" DisplayMemberBinding="{Binding Path=Date}"/>
<GridViewColumn Header="Minuto" Width="70" DisplayMemberBinding="{Binding Path=Minutes}"/>
</GridView>
</ListView.View>
</ListView>
:前に私はあなたに興味を持ってXAML構造を示したい、詳細に説明します。このようにして、特定のアイテムの詳細を更新できます。私はきた私のLiveViewModelで
<Window.DataContext>
<VM:LiveViewModel />
</Window.DataContext>
:
xmlns:VM="clr-namespace:Live.Resources.UI.ViewModels"
と:
このグリッドは、私はこのようなのDataContextを設定したすべての最上部に、私のMainWindow.xamlの一部であり、このクラスの定義:
このクラスは、内部でINotの実装を持つViewModelを継承します。 ifyPropertyChangedは、単に完全性のため:
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(field, value)) return false;
field = value;
OnPropertyChanged(propertyName);
return true;
}
今の私のObservableCollectionは、この定義を持ってプレイモデルに基づいています。
public class Playing : ViewModel
{
private string _dateTime;
private string _minutes;
public string Date
{
get { return _dateTime; }
set { SetField(ref _dateTime, value); }
}
public string Minutes
{
get { return _minutes; }
set { SetField(ref _minutes, value); }
}
...
また、このクラスはINotifyPropertyChangedのを実装します。私は私のコレクションに項目を追加するときだから私は(私のMainWindow.xamlで)これをやった
:
LiveViewModel lsVm = new LiveViewModel();
var playingCollection = lsVm.Playing;
playingCollection.Insert(0, new Playing
{
Date = "03/07/2016",
Minutes = "5",
Home = "foo",
});
残念ながらグリッドで、私は任意の要素が追加され見ることができません。 静的コレクションを作成した場合、静的コレクションとしてObservableCollectionを設定した場合、追加された要素が表示されますが、静的以外のプロパティもあり、更新されません。
私は間違っていますか?ありがとう。
'DataGrid'に' ItemSource'バインディングを設定しましたか?私は何も見ないので。 – hazevich
@hazevichはい、申し訳ありません。質問を更新します。 – Heisenberg
ViewModelの 'lsVm'インスタンスは、' DataGrid'があるビューで使用されているのと同じインスタンスですか? – hazevich