无法通过WPF中的数据模板选择列表框项

无法通过WPF中的数据模板选择列表框项,wpf,xaml,listbox,Wpf,Xaml,Listbox,我无法从列表框中选择所需项目 (当我单击该列表框中的任何项目时,会选择多个项目,但不会选择我单击的项目)。此外,所选项目的背景色也将更改为默认(白色)颜色。 我使用的Xaml代码如下: <ListBox x:Uid="lst_value" Name="lstValues" Background="Wheat" BorderBrush="Black" HorizontalAlignment="Left" VerticalAlignment="Top" BorderThickn

我无法从列表框中选择所需项目 (当我单击该列表框中的任何项目时,会选择多个项目,但不会选择我单击的项目)。此外,所选项目的背景色也将更改为默认(白色)颜色。 我使用的Xaml代码如下:

<ListBox x:Uid="lst_value" Name="lstValues" Background="Wheat"
    BorderBrush="Black" HorizontalAlignment="Left" VerticalAlignment="Top"
    BorderThickness="1" Height="100" Width="150" ItemsSource="{Binding listval}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical" Background="Wheat">
                <TextBlock x:Name="txtblk" Foreground="Black" FontSize="10"
                    TextAlignment="Left" FontWeight="Black" Text="{Binding}"
                    Background="Wheat"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


请告诉我如何解决这个问题。

如果我正确理解您的问题,那么列表框的选择逻辑会做出奇怪的反应。对吧?

在大多数情况下,这种行为与项(枚举中的对象)的Equals()或/和GetHashCode()方法有关。确保列表中没有多个对象在调用一个对象的Equals()时返回true。还要确保没有返回GetHashCode()的更改值(一些随机值)的对象


如果你在上面的方法中发现了问题(我假设等于),但是你必须说你不能改变均衡器()的实现,考虑为你的项创建一个包装对象(VIEW模型)。

< P>如果我理解你的问题是正确的,那么ListBox的选择逻辑会反应怪异。对吧?

在大多数情况下,这种行为与项(枚举中的对象)的Equals()或/和GetHashCode()方法有关。确保列表中没有多个对象在调用一个对象的Equals()时返回true。还要确保没有返回GetHashCode()的更改值(一些随机值)的对象


如果你在上面的方法中发现问题(我假设等于),但是你必须说你不能改变均衡器()的实现,考虑为你的项创建一个包装对象(一个VIEW模型)。< /P> < P>如果我没有错,ListVar是<代码>列表< /C>或任何其他的原始类型列表。 它与您的案例关联的原因是基本类型是结构而不是类

尝试使用具体类的

假设您使用的是类似List的姓名列表

创建具有name属性的类

class person
{
public string Name{get;set;} 
}

使用List,如果我没有弄错,您可以绑定name属性listval是一个
列表
或任何其他基元类型列表。。
class person
{
public string Name{get;set;} 
}
它与您的案例关联的原因是基本类型是结构而不是类

尝试使用具体类的

假设您使用的是类似List的姓名列表

创建具有name属性的类

class person
{
public string Name{get;set;} 
}

使用列表,您可以绑定名称属性

您不应该在
堆栈面板
文本块
上设置使选择模糊的
背景
。要覆盖所选内容的背景,请向ListBoxItems添加资源

class person
{
public string Name{get;set;} 
}
<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Style.Resources>
            <!-- Selected Brush -->
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
            <!-- Selected but out of focus Brush -->
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightGreen" />
        </Style.Resources>
        <!-- If you must set a Background, do it here, should be superfluous though as the ListBox.Background is the same -->
        <Setter Property="Background" Value="Wheat" />
    </Style>
</ListBox.ItemContainerStyle>


如果源集合具有相同的对象(如具有相同值的字符串),则可能会出现选择问题。

您不应在
堆栈面板上设置使选择模糊的
背景
,以及
文本块
。要覆盖所选内容的背景,请向ListBoxItems添加资源

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Style.Resources>
            <!-- Selected Brush -->
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
            <!-- Selected but out of focus Brush -->
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightGreen" />
        </Style.Resources>
        <!-- If you must set a Background, do it here, should be superfluous though as the ListBox.Background is the same -->
        <Setter Property="Background" Value="Wheat" />
    </Style>
</ListBox.ItemContainerStyle>


如果源集合具有相同的对象(例如具有相同值的字符串),则可能会出现选择问题。

在我的情况下,我错误地将ComboBoxItems添加到ListBox.Items集合中。将“ListBoxItem”以外的对象添加到Items集合会导致我出现这种行为。

在我的情况下,我错误地将ComboxItems添加到ListBoxItems集合。将“ListBoxItem”以外的对象添加到Items集合会导致我出现这种行为。

我以相同的方式实现了它。.其中“listval”是通过“observablecollection”类检索到的get属性……如果它是observablecollection类,那么您的textblock为什么会被直接绑定(Text=“{Binding}”)…为什么它没有绑定到任何属性..?是否可以将一个零件发布到您的viewmodel,这将有助于我们提供更好的答案我可以解决它..我在列表集合中插入了相同的字符串..现在,我尝试使用不同的字符串,可以正确地选择项..如果您确定不会获得任何ide在以后的列表中,您可以将此视为FIX,否则在字符串中考虑使用List具体类。因为所有的原始类型都是Stutt(在您的情况下是字符串)。…谢谢您…但是,当使用List类时,我根本无法将项绑定到listbox..我以相同的方式实现了..其中“listval”是通过“observablecollection”类检索的get属性..如果它是observablecollection类,那么您的textblock为什么直接绑定(Text=“{Binding}”)。。。为什么它没有绑定到任何属性。。?有没有可能将一个部件发布到您的viewmodel,这将帮助我们提供更好的答案我可以解决它..我在列表集合中插入了相同的字符串..现在,我尝试使用不同的字符串,我可以正确地选择这些项目。如果你确信将来你不会在列表中得到任何相同的字符串,那么你可以将其视为FIX,否则考虑在字符串的位置使用列表具体类。因为所有的基本类型都是struct(在您的例子中是string)…谢谢您…但是,当使用List类时,我根本无法将项目绑定到listbox。@soma sekhar:如果listVal枚举中的对象相等,则选择逻辑有一个p