C# ListView无法在开始时突出显示所选项目
我目前正在努力解决一个非常奇怪的问题,但找不到原因。 我有一个C# ListView无法在开始时突出显示所选项目,c#,wpf,C#,Wpf,我目前正在努力解决一个非常奇怪的问题,但找不到原因。 我有一个列表视图: <ListView ItemsSource="{Binding AvailableTestCaseDatas}" Grid.Row="2" Name="GListView" SelectedItem="{Binding SelectedTestCaseData, Mode=TwoWay}"> <ListView.Resources> <Style T
列表视图
:
<ListView ItemsSource="{Binding AvailableTestCaseDatas}" Grid.Row="2" Name="GListView" SelectedItem="{Binding SelectedTestCaseData, Mode=TwoWay}">
<ListView.Resources>
<Style TargetType="ListViewItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>
</Style.Resources>
</Style>
</ListView.Resources>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding TestCaseName}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这看起来非常奇怪,它开始工作了
我的装订:
public TestCaseData SelectedTestCaseData
{
get { return _selectedTestCaseData; }
set
{
_selectedTestCaseData = value;
OnPropertyChanged("SelectedTestCaseData");
}
}
我试过:
如果我把这个加载的事件放进去,它是可以工作的,但这是一个黑客行为,我想知道它为什么会这样做的原因。有什么提示吗?我用一些数据尝试了您的Xaml代码,效果很好,所以问题在于您首先设置属性的方式。最可能的问题是
SelectedItem
在第一次被选中和取消选中时,出现了一些奇怪的情况。我建议您在设置所选项目(您的SelectedTestCaseData
)时显示代码,并在设置数据上下文和加载采集数据时显示代码。在这里,我将展示我的代码,它可能会有帮助:
关于ve XAML也一样,但使用我的变量:
<ListView ItemsSource="{Binding Persons}" Grid.Row="2" Name="GListView" SelectedItem="{Binding SelectedPerson, Mode=TwoWay}">
<ListView.Resources>
<Style TargetType="ListViewItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>
</Style.Resources>
</Style>
</ListView.Resources>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
MainViewModel数据上下文中的属性:
#region Persons
private ObservableCollection<PersonViewModel> _Persons;
public ObservableCollection<PersonViewModel> Persons
{
get { return _Persons ?? (_Persons = GetAllPersons()); }
}
private ObservableCollection<PersonViewModel> GetAllPersons()
{
var toRet = new ObservableCollection<PersonViewModel>();
foreach (var i in Enumerable.Range(1,10))
{
toRet.Add(new PersonViewModel {Name = string.Format("Person Name {0}", i)});
}
//!!!!!!!!!!!!!!!!!!!!!HERE I SET THE SELECTED ITEM
SelectedPerson = toRet.First();
return toRet;
}
#endregion
#region SelectedPerson
private PersonViewModel _SelectedPerson;
private const string SelectedPersonName = "SelectedPerson";
public PersonViewModel SelectedPerson
{
get { return _SelectedPerson; }
set
{
Set(SelectedPersonName, ref _SelectedPerson, value);
}
}
#endregion
#地区人士
私人可观察收集人;
公众人士
{
获取{return\u Persons???(\u Persons=GetAllPersons());}
}
私有可观察集合GetAllPersons()
{
var toRet=新的ObservableCollection();
foreach(可枚举范围(1,10)中的var i)
{
Add(newPersonViewModel{Name=string.Format(“人名{0}”,i)});
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!在这里我设置了所选项目
SelectedPerson=toRet.First();
返回托雷特;
}
#端区
#地区选择人
private PersonViewModel _SelectedPerson;
私有常量字符串SelectedPersonName=“SelectedPerson”;
公共人员视图模型选定人员
{
获取{return\u SelectedPerson;}
设置
{
设置(SelectedPersonName、ref\u SelectedPerson、value);
}
}
#端区
数据上下文的设置方式
<Window x:Class="..."
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
...
DataContext="{Binding Main, Source={StaticResource Locator}}">
在本例中,我使用Mvvm ligth的定位器来设置窗口的数据上下文。
希望这有助于解决此问题…显示
SelectedTestCaseData
。输出窗口中有绑定错误吗?我已添加属性。没有与这些类相关的绑定错误。正如我所说的,即使我删除了绑定,这个问题也会被复制,所以我相信它不会被更新。你能发布一个截图吗?我不确定问题出在哪里,因为我在我的复制小项目中看到了突出显示的选定项目。我将稍后尝试制作gif。我知道我有一些错误,我只是没有看到在代码中,或是没有意识到这可能会导致一个问题。我的应用程序有很多ListView,但只有这一个行为错误。所以我希望有人能给我一个提示,我应该在哪里寻找问题。
#region Persons
private ObservableCollection<PersonViewModel> _Persons;
public ObservableCollection<PersonViewModel> Persons
{
get { return _Persons ?? (_Persons = GetAllPersons()); }
}
private ObservableCollection<PersonViewModel> GetAllPersons()
{
var toRet = new ObservableCollection<PersonViewModel>();
foreach (var i in Enumerable.Range(1,10))
{
toRet.Add(new PersonViewModel {Name = string.Format("Person Name {0}", i)});
}
//!!!!!!!!!!!!!!!!!!!!!HERE I SET THE SELECTED ITEM
SelectedPerson = toRet.First();
return toRet;
}
#endregion
#region SelectedPerson
private PersonViewModel _SelectedPerson;
private const string SelectedPersonName = "SelectedPerson";
public PersonViewModel SelectedPerson
{
get { return _SelectedPerson; }
set
{
Set(SelectedPersonName, ref _SelectedPerson, value);
}
}
#endregion
<Window x:Class="..."
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
...
DataContext="{Binding Main, Source={StaticResource Locator}}">