我正在使用WPF中的ListView(MAHApps样式的ListView)。我将ListView绑定到一个可观察的集合。我将SelectedItem-Property绑定到ViewModel的属性。
当我通过GUI选择ListView中的项目时,“SelectedItem”被更改。当我在ViewModel中更改“SelectedItem”时,ListView仅在我将SelectedItem设置为NULL时才会更改。当我设置任何其他(有效!)对象(如ObservableCollection的第一个条目)时,ListView只是忽略它。 此外:当我想要“Veto”一个SelectedItem Change(因为没有保存数据)时,ListView会突出显示新选择的项而不是ViewModel的SelectedItem-Property。
我已经尝试将Binding更改为“Mode = TwoWay” - 也不能正常工作(否则对SelectedItem的“NULL”更改也不会起作用)
这是视图中的代码:
<ListView ItemsSource="{Binding Configurations}" SelectedItem="{Binding SelectedUserConfiguration}" SelectionMode="Single">
<ListView.View>
<GridView>
<GridViewColumn Header="User Configuration" DisplayMemberBinding="{Binding ConfigurationName}" Width="200" />
</GridView>
</ListView.View>
</ListView>
我的ViewModel:
public ObservableCollection<UserConfigurationViewModel> Configurations { get; private set; }
private UserConfigurationViewModel _selectedUserConfiguration;
public UserConfigurationViewModel SelectedUserConfiguration
{
get {
return this._selectedUserConfiguration;
}
set
{
if (this._selectedUserConfiguration != null && this._selectedUserConfiguration.WasChanged)
{
if (ask-user)
{
this._selectedUserConfiguration.Reset();
this._selectedUserConfiguration = value;
}
}
else
{
this._selectedUserConfiguration = value;
}
NotifyOfPropertyChange(() => this.SelectedUserConfiguration);
}
}
这是一个例子 - 这是在构造函数中调用的。试图实现一个测试按钮,选择最后一个,第一个和任何项目 - 没有任何工作......
if (this.Configurations.Count > 0)
{
this.SelectedUserConfiguration = this.Configurations.First();
}
感谢您的帮助! 霍尔格
答案 0 :(得分:2)
为了从代码中选择任何集合控件中的选定项目,所选项目必须是绑定到ItemsSource
属性的集合中的实际项目。如果您的收藏品至少包含一个唯一属性,则可以使用LinQ
轻松实现此目的:
SelectedUserConfiguration = Configurations.Where(c => c.UniqueProperty ==
valueOfItemToSelect).FirstOrDefault();
如果您的数据类型对象没有唯一属性,则只需为此目的添加int Id
属性。
答案 1 :(得分:0)
我在使用TabControl时遇到了同样的问题 我试图创建一个int属性并将其绑定到SelectedIndex,但没有成功。
奇怪的是,这就是诀窍:
在ListView集IsSynchronizedWithCurrentItem="True"
中
像这样设置ListView.Resources
:
<ListView.Resources>
<Style TargetType="ListViewItem" x:Key="ListViewTemplate">
<Setter Property="IsSelected" Value="True" />
</Style>
</ListView.Resources>
祝你好运!