WPF-在ListView中折叠项
谢谢你花时间阅读我的帖子 我正在Windows 7 64位上使用VS2012、WFP和.net4.5 我有一个带有xaml的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
<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>