У меня есть пользовательский интерфейс, который позволяет вам выбрать команду слева, а затем отредактировать свойства выбранной команды справа. Вот пример сценарий демонстрирует вопрос:ListView не обновляется, когда наблюдаются изменения коллекции?
- Выбор Дракона команда
- Переименовать Smaug, нажмите сохранить.
- «Дракон» в панели выбора слева не обновляется до «Smaug». Однако, если я выберу другую команду, повторно выберите «Дракон», текстовое поле с правой стороны все еще (правильно) показывает «Smaug». Я уверен, что это означает, что коллекция данных привязки правильно обновляется.
- Закройте окно настроек, затем снова откройте его.
- Левая панель теперь (правильно) показывает «Smaug».
Список команд в настоящее время хранятся в качестве наблюдаемой коллекции:
public class TeamList : ObservableCollection<Team>
{
public TeamList() : base() { }
}
список команды на левом заселяются/занной:
SettingsWindow.xaml
<ListView ItemsSource="{Binding}" Grid.Column="0" Grid.Row="1" DisplayMemberPath="name"
SelectionChanged="ListTeamSelected" SelectionMode="Single">
<!--<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Foreground" Value="{Binding color}" />
</Style>
</ListView.ItemContainerStyle>-->
</ListView>
SettingsWindow.xaml.cs
public Team selectedTeam { get; set; }
public SettingsWindow()
{
teams = TeamManager.Instance().teamList;
this.DataContext = this.teams;
if (!Application.Current.Resources.Contains("selectedTeam"))
Application.Current.Resources.Add("selectedTeam", selectedTeam);
InitializeComponent();
}
Данные о праве заселяется и сохранены:
SettingsWindow.xaml.cs
private void ClickSaveData(object sender, RoutedEventArgs e)
{
selectedTeam.name = TeamName.Text;
selectedTeam.color = PrimaryColorPicker.SelectedColor;
selectedTeam.secondaryColor = SecondaryColorPicker.SelectedColor;
saved = true;
}
private void ListTeamSelected(object sender, RoutedEventArgs e)
{
selectedTeam = (Team)(sender as ListView).SelectedItems[0];
TeamInfo.Visibility = Visibility.Visible;
TeamName.Text = selectedTeam.name;
PrimaryColorPicker.SelectedColor = selectedTeam.color;
SecondaryColorPicker.SelectedColor = selectedTeam.secondaryColor;
}
Twofold вопрос:
Я делаю что-то не так с моей привязкой данных, которая вызывает эту проблему? (Я новичок в WPF)
Если нет, есть ли способ заставить пользовательский интерфейс обновить список слева? (это кажется смутно неудобным для меня)
Заранее благодарю за любую помощь!
ли ваши свойства реализации INotifyPropertyChanged? – reggaeguitar
См. Http://stackoverflow.com/questions/1315621/implementing-inotifypropertychanged-does-a-better-way-exist и http://wpftutorial.net/INotifyPropertyChanged.html – reggaeguitar
Не понял, что это было. Благодаря! Вы хотите опубликовать его в качестве ответа, чтобы я мог отметить его как ответ? – Benjin