列表框中的wpf单选按钮不会在第一次检查

时间:2017-08-07 13:30:19

标签: c# wpf

<ListBox ItemsSource="{Binding XyzList}" BorderThickness="0" Background="Transparent">
    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <ContentPresenter/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Image Visibility="{Binding Stop}" 
                       ToolTip="{Binding Stopp}" 
                       HorizontalAlignment="Left" 
                       Opacity="1" Width="11" Height="11" 
                       Source=stop.png"/>
                <RadioButton Content="{Binding Period}" 
                             IsEnabled="{Binding Ok}" 
                             IsChecked="{Binding IsSelected}" 
                             Margin="20,0,0,0" HorizontalAlignment="Left"                                
                             Command="Views:ValjLeveransArende.PrCommand"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

当我第一次选择单选按钮时,它不会被选中,我得到正确的数据,但不会被选中。

当我第二次尝试时,它会被选中。

更多信息:

 public class XyzList: WorkViewModelBase
{
    private bool _isSelected;
    public bool IsSelected
    {
        get { return _isSelected; }
        set
        {
            _isSelected = value;
            OnPropertyChanged(nameof(IsSelected));
        }
    }
}

然后当我填写其余数据时,我将其设置为

list.Add(new XyzList()
            {                    
                IsSelected = false
            });

1 个答案:

答案 0 :(得分:2)

看起来您将IsSelected绑定在两个由同一用户操作触发的位置。相反,您应该只保留一个View-to-Viewmodel绑定并将不同的视图控件链接到另一个。

保持在ItemContainerStyle

<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />

RadioButton

的变化
IsChecked="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=ListBoxItem}}"

另一个问题:您的radiobuttons不会表现得像是属于同一个组......如果您确实需要其功能,则可能需要使用RadioButton.GroupName属性。但是,可以完全依靠ListBox进行选择。