首页 文章

WPF绑定到Listview的Itemtemplate的Visibility无法正常工作[重复]

提问于
浏览
0

这个问题在这里已有答案:

我正在使用WPF Prism.Mvvm . 我的侧面有一个导航栏,其中包含一个绑定到Itemssource的Listview . 这些项目包含图像和内容 . 现在我的目标是折叠项目的内容,以便我的导航控件只显示图标 .

我已经定义了一个可见性绑定,在我的Listview之外的一些图像上使用它可以很好地工作 . 但是一旦我尝试在Listview的itemtemplate中使用该精确绑定,就没有任何反应 . 有趣的是,如果我将Visibility设置为Collapsed而没有绑定,它会再次起作用 .

这是我的观点

<UserControl.Resources>
    <ResourceDictionary>
        <BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />
    </ResourceDictionary>

[...]

<DockPanel >
    <ContentControl DockPanel.Dock="Top">
        <StackPanel>
            <Button Margin="5,5,5,5" Style="{StaticResource MyButton}" Command="{Binding ExpandMenuCommand}" Content="Menu" HorizontalAlignment="Left" Width="43.017" />
            <ListView  BorderThickness="0" VerticalContentAlignment="Top" SelectionMode="Single" ItemsSource="{Binding MenuItems}" SelectedItem="{Binding SelectedItem}" Background="Transparent">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid VerticalAlignment="Center">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Image Margin="0,10,0,10" Grid.Column="0" Source="{Binding ImageSource}" />
                            <TextBlock Visibility="{Binding Visibility, Converter={StaticResource booleanToVisibilityConverter}}" VerticalAlignment="Center" Margin="10,10,10,10" Grid.Column="1" Text="{Binding Content}" Background="Transparent" FontFamily="Arial" FontWeight="Bold" />
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackPanel>
    </ContentControl>
    <ContentControl DockPanel.Dock="Bottom">
        <Grid>
            <Image Visibility="{Binding Visibility, Converter={StaticResource booleanToVisibilityConverter}}" HorizontalAlignment="Center" Height="59" Margin="19,0,0,25" Width="182" Source="/ModuleA;component/Images/Logo.png" VerticalAlignment="Bottom" />
        </Grid>
    </ContentControl>
</DockPanel>

现在,如果我将 Visibility="{Binding Visibility, Converter={StaticResource booleanToVisibilityConverter}}" 复制到Itemtemplate之上的ANYTHING,比如Listview本身或Stackpanel,它就像它对Listview下的Image一样 . 但Listview.ItemTemplate中的Textblock,Image或Grid本身不会响应我的Binding . 然而将其设置为 Visibility="Collapsed" 就像我打算工作一样 .

我的Viewmodel:

private static bool _expanded = true;

private bool _visibility = _expanded;

public bool Visibility
{
    get { return _visibility; }
    set { SetProperty(ref _visibility, value); }
}


    private void ExpandMenu()
    {
        _expanded = !_expanded;
        Visibility = _expanded;
    }

1 回答

  • 0

    ListView.ItemTemplate是MenuItem对象的模板 . 我想 Visibility 不是MenuItem类的属性,它属于另一个视图模型 . 所以你需要从不同的DataContext绑定它:

    <TextBlock Visibility="{Binding DataContext.Visibility, 
                                    Converter={StaticResource booleanToVisibilityConverter}, 
                                    RelativeSource={RelativeSource AncestorType=ListView}}" 
               VerticalAlignment="Center" 
               Margin="10,10,10,10" Grid.Column="1" 
               Text="{Binding Content}" 
               Background="Transparent" 
               FontFamily="Arial" 
               FontWeight="Bold" />
    

相关问题