ListView在RaisePropertyChangedEvent之后不更新

时间:2018-04-07 17:46:13

标签: c# xaml mvvm

我有以下XAML

echo

哪个绑定到我的<Label Content="Player Name" Grid.Row="0" Grid.Column="0" Margin="2,0,2,0" HorizontalAlignment="Right" Foreground="White"/> <TextBox Grid.Row="0" Grid.Column="1" Margin="2,2,2,2" Text="{Binding PlayerFirstName}"/> <Label Content="Player Last Name" Grid.Row="1" Grid.Column="0" Margin="2,0,2,0" HorizontalAlignment="Right" Foreground="White"/> <TextBox Grid.Row="1" Grid.Column="1" Margin="2,2,2,2" Text="{Binding PlayerLastName}"/> <Label Content="Player College" Grid.Row="2" Grid.Column="0" Margin="2,0,2,0" HorizontalAlignment="Right" Foreground="White"/> <ComboBox Grid.Row="2" Grid.Column="1" Margin="2,2,2,2" ItemsSource="{Binding Colleges}" DisplayMemberPath="CollegeName" SelectedItem="{Binding SelectedCollege}"/> <Button Content="Add Player" Grid.Row="3" Grid.Column="1" Width="75" Margin="2,2,2,2" Background="Blue" Foreground="White" HorizontalAlignment="Right" Command="{Binding NewPlayer}"/> <ListView Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="1" Margin="2,2,2,2" ItemsSource="{Binding Players, UpdateSourceTrigger=PropertyChanged}"> <ListView.View> <GridView> <GridViewColumn Header="First Name" Width="100" DisplayMemberBinding="{Binding First}"/> <GridViewColumn Header="Last Name" Width="100" DisplayMemberBinding="{Binding Last}"/> <GridViewColumn Header="College" Width="100" DisplayMemberBinding="{Binding College}"/> </GridView> </ListView.View> </ListView>

PlayersViewModel

这一切都很有效,除非我在PersonTableAdapter中运行public class PlayersViewModel : ObservableObject { #region Variables private DataView _Players = Controller.PlayerView.GetData().DefaultView; private DataView _Colleges = Controller.CollegeTableAdapter.GetData().DefaultView; private string _PlayerFirstName; private string _PlayerLastName; private DataRowView _SelectedCollege; private long _PlayerCollegeID; #endregion #region Bindings public DataView Players { get { return _Players; } set { _Players = value; RaisePropertyChangedEvent("Players"); } } public DataView Colleges { get { return _Colleges; } set { _Colleges = value; RaisePropertyChangedEvent("Colleges"); } } public string PlayerFirstName { get { return _PlayerFirstName; } set { _PlayerFirstName = value; RaisePropertyChangedEvent("PlayerFirstName"); } } public string PlayerLastName { get { return _PlayerLastName; } set { _PlayerLastName = value; RaisePropertyChangedEvent("PlayerLastName"); } } public DataRowView SelectedCollege { get { return _SelectedCollege; } set { _SelectedCollege = value; _PlayerCollegeID = _SelectedCollege.Row.Field<long>("CollegeID"); RaisePropertyChangedEvent("SelectedCollege"); } } public ICommand NewPlayer { get { return new DelegateCommand(AddPlayer); } } #endregion #region Methods private void AddPlayer() { Controller.PersonTableAdapter.InsertPerson(_PlayerFirstName, _PlayerLastName, _PlayerCollegeID); Players = Controller.PlayerView.GetData().DefaultView; } #endregion } 查询(手动工作并且我已经证明可以从程序中运行),InsertPerson ListView不会更新添加新条目。

1 个答案:

答案 0 :(得分:0)

我发现了我做错了什么。

始终确保您在INotifyPropertyChanged班级

中实施ObservableObject界面 我现在看起来像这样:

public abstract class ObservableObject : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChangedEvent(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

}