WPF-在ListView中折叠项

WPF-在ListView中折叠项,wpf,listview,events,binding,visibility,Wpf,Listview,Events,Binding,Visibility,谢谢你花时间阅读我的帖子 我正在Windows 7 64位上使用VS2012、WFP和.net4.5 我有一个带有xaml的ListView控件,如下所示: <ListView Name="lvViewerControl" SelectionMode="Single" SelectedIndex="{Binding Path=ViewType, Mode=TwoWay, UpdateSourceTrig

谢谢你花时间阅读我的帖子

我正在Windows 7 64位上使用VS2012、WFP和.net4.5

我有一个带有xaml的ListView控件,如下所示:

<ListView Name="lvViewerControl"
                      SelectionMode="Single"
                      SelectedIndex="{Binding Path=ViewType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      Background="{x:Null}"
                      BorderBrush="{x:Null}"
                      Margin="2">
                <Label Name="lblView2D"
                       Width="40"
                       Height="40"
                       Margin="3"
                       Background="#FF595959"
                       Foreground="White"
                       HorizontalContentAlignment="Center"
                       VerticalContentAlignment="Center">
                    <Image Source="/CaptureSetupModule;component/Icons/2D.png" />
                </Label>
                <Label Name="lblView3D"
                       Width="40"
                       Height="40"
                       Margin="3"
                       Background="#FF595959"
                       Foreground="White"
                       HorizontalContentAlignment="Center"
                       VerticalContentAlignment="Center">
                    <Image Source="/CaptureSetupModule;component/Icons/3D.png" />
                </Label>
                <Label Name="lblViewTiles"                       
                       Width="40"
                       Height="40"
                       Margin="3"
                       Background="#FF595959"
                       Foreground="White"
                       HorizontalContentAlignment="Center"
                       VerticalContentAlignment="Center"
                       Visibility="{Binding Path=XYCtrlVisible, Mode=TwoWay, Converter={StaticResource boolToVis}}">
                    <Image Source="/CaptureSetupModule;component/Icons/Tile.png" />
                </Label>
            </ListView>
这是我的转换器:

public sealed class BooleanToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var flag = false;
            if (value is bool)
            {
                flag = (bool)value;
            }
            else if (value is bool?)
            {
                var nullable = (bool?)value;
                flag = nullable.GetValueOrDefault();
            }
            if (parameter != null)
            {
                if (bool.Parse((string)parameter))
                {
                    flag = !flag;
                }
            }
            if (flag)
            {
                return Visibility.Visible;
            }
            else
            {
                return Visibility.Collapsed;
            }
        }
此代码仅在程序第一次启动时使项折叠,并从xml文件加载可见性。之后,不管可见性绑定XYCtrlVisible如何更改,UI都不会显示任何响应。项目始终存在,或不存在


这里可能有点乱,如果你还需要什么,请告诉我。我自己也很困惑。谢谢。

我建议您查看
WPF的
转换器

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, 
                          CultureInfo culture)
    {
        if (value is Boolean)
        {
                return ((bool)value) ? Visibility.Visible : Visibility.Collapsed;
        }
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, 
                          CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
XAML

<StackPanel>
<StackPanel.Resources>
    <BooleanToVisibilityConverter x:Key="boolToVis" />
</StackPanel.Resources>

<CheckBox x:Name="chkShowDetails" Content="Show Details" />
<StackPanel x:Name="detailsPanel" 
            Visibility="{Binding IsChecked, ElementName=chkShowDetails, 
                         Converter={StaticResource boolToVis}}">
</StackPanel>


可以找到更多信息。

代码中不起作用的部分在哪里?我没有看到任何
可见性
触发器。正如您所指出的,我修改了帖子,我试图将可见性绑定到附近某个组件的某些IsCheck。我试图绑定到一个变量。绑定是正常的,只是可见性没有改变。当你说“绑定是正常的”时,是哪个绑定?我在代码中没有看到将
lblViewTiles
设置为
Collapsed?
行:_liveVM.XYCtrlVisible=ndList[0]。属性[“可见性”]。值。等于(“可见”)?可见性.可见:可见性.折叠;将可见性设置为“折叠”。我很欣赏你的例子,但这似乎与我的情况相去甚远。我是WPF的新手,所以如果这里有更适合我的产品,我将不胜感激您询问是否有一种简单的方法来操纵控件的可见性。将
转换器
MVVM
一起使用将使其变得简单。我猜
\u liveVM
列表视图的
数据上下文
,而不是
标签
,这就是为什么它没有更新
可见性
。知道如何找到标签的数据上下文吗?
<StackPanel>
<StackPanel.Resources>
    <BooleanToVisibilityConverter x:Key="boolToVis" />
</StackPanel.Resources>

<CheckBox x:Name="chkShowDetails" Content="Show Details" />
<StackPanel x:Name="detailsPanel" 
            Visibility="{Binding IsChecked, ElementName=chkShowDetails, 
                         Converter={StaticResource boolToVis}}">
</StackPanel>