Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ListView无法在开始时突出显示所选项目_C#_Wpf - Fatal编程技术网

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");
        }
    }
我试过:

  • 删除绑定,并使用代码检查问题。仍然复制
  • 确保此列表的代码中没有其他引用
  • 启用列表(从一开始就禁用)
  • 确保list.Items.Contains(list.SelectedItem)&&list.Items.Count>0
  • 正在删除样式和数据模板

  • 如果我把这个加载的事件放进去,它是可以工作的,但这是一个黑客行为,我想知道它为什么会这样做的原因。有什么提示吗?

    我用一些数据尝试了您的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}}">