WPF ListView忽略SelectedItem更改
我正在使用WPF中的ListView,它绑定在一个可观察的集合中。然后,我将SelectedItem属性绑定到ViewModel的一个属性WPF ListView忽略SelectedItem更改,wpf,listview,binding,Wpf,Listview,Binding,我正在使用WPF中的ListView,它绑定在一个可观察的集合中。然后,我将SelectedItem属性绑定到ViewModel的一个属性 当我通过GUI在ListView中选择一个项目时,“SelectedItem”被更改 当我在ViewModel中更改“SelectedItem”时,ListView仅在我将SelectedItem设置为NULL时更改 当我设置任何其他(有效!)对象(如ObservableCollection的第一个条目)时,ListView会忽略它 此外:当我想“否决”
- 当我通过GUI在ListView中选择一个项目时,“SelectedItem”被更改李>
- 当我在ViewModel中更改“SelectedItem”时,ListView仅在我将SelectedItem设置为NULL时更改李>
- 当我设置任何其他(有效!)对象(如ObservableCollection的第一个条目)时,ListView会忽略它
Mode=TwoWay
-也不起作用(否则,将“NULL”更改为SelectedItem也不起作用)
这是视图中的代码:
<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);
}
}
public-observeCollection配置{get;private-set;}
private UserConfigurationViewModel\u selectedUserConfiguration;
公共用户配置视图模型选择的用户配置
{
获取{
返回此项。\ u选择了SERConfiguration;
}
设置
{
if(this.\u selectedUserConfiguration!=null&&this.\u selectedUserConfiguration.WasChanged)
{
如果(询问用户)
{
这是。_selectedUserConfiguration.Reset();
这是。\ u selectedUserConfiguration=值;
}
}
其他的
{
这是。\ u selectedUserConfiguration=值;
}
NotifyOfPropertyChange(()=>this.SelectedUserConfiguration);
}
}
要从代码中选择任何集合控件中的所选项目,所选项目必须是绑定到ItemsSource
属性的集合中的实际项目。如果您的收藏项目至少有一个唯一属性,则使用LinQ
可以很容易地实现这一点:
SelectedUserConfiguration = Configurations.Where(c => c.UniqueProperty ==
valueOfItemToSelect).FirstOrDefault();
如果您的数据类型对象没有唯一的属性,您可以简单地为此添加一个
int Id
属性。我刚刚遇到了TabControl的相同问题
我试图创建一个int属性并将其绑定到SelectedIndex,但没有成功
奇怪的是,这确实起了作用:
在ListView集中IsSynchronizedWithCurrentItem=“True”
设置一个ListView.Resources
,如下所示:
<ListView.Resources>
<Style TargetType="ListViewItem" x:Key="ListViewTemplate">
<Setter Property="IsSelected" Value="True" />
</Style>
</ListView.Resources>
我只是猜测,问题可能是ListView的SelectedItem
属性的类型是object
,而您的SelectedUserConfiguration
属性的类型是UserConfigurationViewModel
?如何解决这个问题?