WPF 奇怪的行为:SelectedValue 设置正确但然后 ist 重置为 NULL

WPF weird behaviour: The SelectedValue is set right BUT then ist reset to NULL

我正在将 ListBox 绑定到名为 FilmeSerienListe 的 ViewModel 中的 List。当ismouseover = True时设置SelectedItem。 ListBox 的 SelectedItem 绑定到名为 SelectedFilmSerie.

的 ViewModel 中的 属性

这意味着当鼠标悬停在一个特定的 ListBoxItem 上时,这个 ListBoxItem 被选中并且它的值绑定到 SelectedFilmSerie。但这似乎不太有效,因为 SelectedFilmSerie 属性 由于某种原因总是 NULL。因此,我调试了该应用程序以查看出了什么问题 – 现在奇怪的行为 – SelectedFilmSerie 实际上不是整个时间 NULL。

起初——当鼠标悬停在 ListBoxItem 上时——value 参数设置为正确的对象,并且它不是 NULL,但是当我进一步调试时 SelectedFilmSerie 属性 被召回,现在值参数为 NULL,这使得 SelectedFilmSerie 属性 也为 NULL。

WPF:

<ListBox ItemsSource="{Binding FilmeSerienListe}"
         SelectedItem="{Binding SelectedFilmSerie}">

   <ListBox.ItemContainerStyle>
      <Style TargetType="{x:Type ListBoxItem}">

         <Setter Property="Template">
            <Setter.Value>
               <ControlTemplate TargetType="ListBoxItem">
                  <ContentPresenter />
               </ControlTemplate>
            </Setter.Value>
         </Setter>

         <Style.Triggers>
            <Trigger Property="IsMouseOver"
                     Value="True">

               <Setter Property="IsSelected"
                        Value="true" />

                  </Setter.Value>
               </Setter>
            </Trigger>
         </Style.Triggers>
      </Style>
   </ListBox.ItemContainerStyle>

C#

private IEnumerable<FilmeSerien> _filmeSerienListe;
public IEnumerable<FilmeSerien> FilmeSerienListe
{
    get => _filmeSerienListe;
    set
    {
        _filmeSerienListe = value;
        NotifyPropertyChanged();
    }
}

private FilmeSerien _selectedFilmSerie;
public FilmeSerien SelectedFilmSerie
{
    get => _selectedFilmSerie;
    set
    {
        Trace.WriteLine(value != null ? "Value is NOT null" : "Value is NULL");
        _selectedFilmSerie = value;
        NotifyPropertyChanged();
    }
}

调试器:

ismouseover = 真: 4xStep Over: 1xStep Over: 4xStep Over:

输出:

鼠标进入 ListBoxItem 的那一秒,我得到 Value is NOT null,鼠标离开 ListBoxItem 的那一秒,我得到 Value is NULL

更多详情:

ListBox 是绑定到 FilmeSerienListe 且数据类型为 IEnumerable<FilmeSerien> 的卡片列表,每个 ListBoxItem 是一张卡片,表示 FilmeSerien

一张卡片包含多个属性,这些属性位于 属性 中,数据类型为 FilmeSerien。喜欢:Titel、Img、Vote 和其他。 Vote 是一个 int 数据类型 属性。

看起来像这样:

问题:

每次我都打明星来给电影投票。我得到一个 NullReferenceException 因为 SelectedFilmSerie 是空的。

WPF 对于明星:

<Viewbox>
   <materialDesign:RatingBar Value="{Binding Vote}"
                              Orientation="Horizontal"
                              Foreground="SkyBlue"/>
</Viewbox>

如果我没理解错的话,您需要 select ListBox 元素不是通过单击,而是将鼠标悬停在它上面。

老实说,我什至没有想过这可能需要什么。
我在评论中要求澄清这样一个实现的目的,但你没有回答。

但是如果,我理解正确你的问题,那么它是这样实现的:

    <Window.Resources>
        <Style x:Key="listBoxItemStyle" TargetType="ListBoxItem">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Trigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsSelected">
                                    <DiscreteBooleanKeyFrame KeyTime="0" Value="True"/>
                                </BooleanAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                </Trigger>
            </Style.Triggers>
        </Style>
  </Window.Resources>
    <Grid VerticalAlignment="Center" >
        <ListBox ItemsSource="{Binding FilmeSerienListe}"
                 SelectedItem="{Binding SelectedFilmSerie}"
                 ItemContainerStyle="{DynamicResource listBoxItemStyle}">
        </ListBox>
    </Grid>