【问题标题】:Simple GridViewColumn binding question简单的 GridViewColumn 绑定问题
【发布时间】:2011-04-19 16:52:35
【问题描述】:

我有一个ListView 和几个GridViewColumn。其中一列显示了图层的可见性,我绑定了图标和不透明度,但我不确定如何将其绑定到名为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;

【问题讨论】:

    标签: c# .net wpf xaml binding


    【解决方案1】:

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

    仍然假设您的收藏是:

    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>
    

    【讨论】:

    • 谢谢,IsVisible 属性位于 Effect 的每个实例中,所以我这样做了,但没有成功:&lt;DataTrigger Binding="{Binding ElementName=Effect, Path=IsVisible}" Value="false"&gt; 我做错了吗?
    • 如果列表数据绑定到具有 IsVisible 属性的实例列表,我认为您不需要 {Binding} 中的 ElementName 属性,只需要 Path。
    • 感谢 Craig,它已经绑定到一个列表。所以我应该只使用Binding="{Binding Path=IsVisible}"。这消除了输出窗口中打印的绑定错误,但我没有看到不透明度发生变化。
    • 同样在 IsVisible 的设置器中,我打印了更改时的值,但没有打印任何内容,所以我认为它没有正确绑定。
    • 我已经编辑了我的答案。但是不要忘记,在更改对象属性的值时要更新不透明度,您必须引发通知属性更改事件,以便 XAML 触发器可以......好吧..触发
    【解决方案2】:

    不知道您需要更改 Opacity 值。您需要绑定的是 Image 的 Visibility 属性,并使用转换器从布尔 IsVisible 获取 Visibility 枚举值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2011-08-31
      • 2010-09-22
      相关资源
      最近更新 更多