Я пытался найти ответ на этот вопрос, но мне не повезло.По сути, у меня есть представление списка, которое связано с коллекцией, возвращенной из модели представления.Я связываю выбранный элемент представления списка со свойством в моем списке просмотра, чтобы выполнить проверку, чтобы убедиться, что элемент выбран.Проблема в том, что иногда я хочу загрузить этот список с одним из уже выбранных элементов.Я надеялся, что смогу установить свойство в моей модели представления с выбранным объектом и автоматически выбрать этот элемент.Это не происходитМой список просмотра загружается без выбранного элемента.Я могу успешно установить выбранный индекс на 0-й индекс, так почему я не могу установить выбранное значение.Представление списка находится в режиме одиночного выбора.
Вот соответствующий код из моего представления списка
<ListView Name="listView1" ItemsSource="{Binding Path=AvailableStyles}" SelectionMode="Single">
<ListView.SelectedItem>
<Binding Path="SelectedStyle" ValidatesOnDataErrors="True" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" BindingGroupName="StyleBinding" >
</Binding>
</ListView.SelectedItem>
<ListView.View>
<GridView>
<GridViewColumn Header="StyleImage">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="800.jpg"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Style Code" DisplayMemberBinding="{Binding StyleCode}"/>
<GridViewColumn Header="Style Name" DisplayMemberBinding="{Binding StyleName}"/>
</GridView>
</ListView.View>
</ListView>
А вот соответствующий код из моей модели просмотра
public class StyleChooserController : BaseController, IDataErrorInfo, INotifyPropertyChanged
{
private IList<Style> availableStyles;
private Style selectedStyle;
public IList<Style> AvailableStyles
{
get { return availableStyles; }
set
{
if (value == availableStyles)
return;
availableStyles = value;
OnPropertyChanged("AvailableStyles");
}
}
public Style SelectedStyle
{
get { return selectedStyle; }
set
{
//if (value == selectedStyle)
// return;
selectedStyle = value;
OnPropertyChanged("SelectedStyle");
}
}
public StyleChooserController()
{
AvailableStyles = StyleService.GetStyleByVenue(1);
if (ApplicationContext.CurrentStyle != null)
{
SelectedStyle = ApplicationContext.CurrentStyle;
}
}
public string Error
{
get { return null; }
}
public string this[string columnName]
{
get
{
string error = string.Empty;
if (columnName == "SelectedStyle")
{
if (SelectedStyle == null)
{
error = "required";
}
}
return error;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
}
Я должен отметить, что "Стиль"ссылка здесь не имеет ничего общего с WPF.Это бизнес-объект.Я действительно ищу решение, которое не нарушает паттерн MVVM, но я бы хотел, чтобы что-то заработало.Я попытался перебрать список Listview.Items, просто чтобы установить его вручную, но он всегда пуст при попытке.Любая помощь приветствуется.
Редактировать: я обновил код для использования INotifyPropertyChanged.Это все еще не работает.Любые другие предложения 2-е редактирование: я добавил UpdateSourceTrigger = "PropertyChanged".Это все еще не сработало.
Спасибо