При определенных условиях, если пользователь выбирает элемент в поле со списком, он автоматически должен быть изменен на другой элемент.
ViewModel
public class VM : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
private string selected;
public string Selected
{
get { return selected; }
set
{
if (selected != value)
{
selected = value;
OnPropertyChanged("Selected");
}
}
}
private ObservableCollection<string> collection;
public ObservableCollection<string> Collection
{
get { return collection; }
set
{
collection = value;
OnPropertyChanged("Collection");
}
}
public VM()
{
this.Collection = new ObservableCollection<string>(new string[] { "A", "B", "C" });
this.Selected = "A";
this.PropertyChanged += VM_PropertyChanged;
}
void VM_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
this.Selected = "C";
}
}
Вид
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Grid>
<ComboBox ItemsSource="{Binding Collection}" SelectedValue="{Binding Selected}"/>
</Grid>
<Label Content="{Binding Selected, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</Window>
Итак, в этом примере, независимо от того, что я выбираю, он должен отображать «C» как в поле со списком, так и в метке, но «C» отображается только на метке, это означает, что ViewModel обновляется, но не представление.
Кажется, проблема здесь в том, чтобы попытаться изменить свойство из метода PropertyChanged.
Что может быть не так?
Collection
, тогда как ваше представление привязывается кColeccion
? - person wablab   schedule 25.04.2017UpdateSourceTrigger=PropertyChanged
к привязкам свойств, которые не могут обновлять источник? Почему вы ожидаете, что ваш ComboBox назначит новую ObservableCollection дляCollection
? - person 15ee8f99-57ff-4f92-890c-b56153   schedule 25.04.2017INotifyPropertyChanging.PropertyChanging
и, возможно, установить для этогоSelected
в обработчике событий. Я не пробовал, поэтому не знаю, поможет или нет. И на самом деле вам может даже не понадобиться привязываться к нему; вы могли бы справиться со всем этим в самой модели представления. (Но если вы собираетесь это сделать, то может иметь смысл просто изменить значениеSelected
в самом установщике.) - person wablab   schedule 25.04.2017