简单的GridViewColumn绑定问题

时间:2011-04-19 16:52:35

标签: c# .net wpf xaml binding

我有ListViewGridViewColumn。其中一列我显示了图层的可见性,并且我将图标和不透明度绑定在一起,但我不确定如何将其绑定到名为IsVisible的属性,以便每当在该列中单击某个项目时,它将切换IsVisible布尔值。

关于如何做到这一点的任何想法?

<GridViewColumn Width="20">
    <GridViewColumnHeader Content="X" />
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Width="18"
                Height="18"
                Source="{Binding VisibleIcon}"
                        Opacity="{Binding VisibleOpacity}"
                        />
            </StackPanel>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

此外,VisibleOpacity定义了图标的Opacity,但我觉得这不是一个好方法,因为我必须为此目的创建此属性。有没有办法在xaml中内联?也许像:

Opacity = (this.IsVisible) ? 1 : 0.5;

2 个答案:

答案 0 :(得分:2)

编辑:好的,所以我认为现在这应该很好..

仍假设您的收藏集是:

public class Effect : INotifyPropertychanged
{
    //Some properties


    private bool isVisible;
    public bool IsVisible
    {
        get { return isVisible;}
        set { isVisible=value;//plus raise propertychanged notification}
    }      
}

然后我认为传播图像的最简单方法是同时点击代码属性和图像不透明度,将图标包裹在切换按钮中。这是我使用和测试过的代码。只需将您的值替换并将其放入数据模板中,这次就可以正常工作了:

<ToggleButton x:Name="tgBtn" Height="20" Width="20" IsChecked="{Binding IsVisible}" 
              BorderThickness="0" Background="Transparent" >
    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Image Width="18"
                           Height="18"                 
                           Source="C:\USERS\thumbnail.jpeg">
                            <Image.Style>
                                <Style TargetType="{x:Type Image}">
                                    <Setter Property="Opacity" Value="1"/>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding ElementName=tgBtn, Path=IsChecked}" Value="false">
                                            <Setter Property="Opacity" Value="0.5"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Image.Style>
                        </Image>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ToggleButton.Style>
</ToggleButton>

答案 1 :(得分:1)

不知道您需要更改“不透明度”值。你需要绑定的是Image的Visibility属性,并使用转换器从布尔值IsVisible到Visibility枚举值。

请参阅http://www.jeff.wilcox.name/2008/07/visibility-type-converter/