wpf - ListView 基于绑定(bind)值的不同控件

标签 wpf mvvm

我有一个显示链接按钮的 ListView。我只需要链接按钮来显示“FileAddress”字符串是否有值。否则,它应该显示一个带有 Title 的简单 TextBlock。

<GridViewColumn.CellTemplate>
    <DataTemplate>
        <Button Style="{StaticResource LinkButton}" Height="23" Content="{Binding Path=Title}" />
    </DataTemplate>
</GridViewColumn.CellTemplate>

任何想法,将不胜感激。

TIA。

最佳答案

我认为“gridview”是 wpf 的一个简单组件。进行这种类型的更改有点笨拙。

您可以采用三种不同的方法:

1) 使用 GridViewColumn.CellTemplateSelector (http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector)
虽然不喜欢=(

2) 创建一个根据需要运行的 UserControl。
看起来合适且相对容易

3) 通过触发器更改按钮样式:

         <Button.Style>
            <Style TargetType="Button">
                <Style.Triggers>
                    <Trigger Property="Content" Value="{x:Null}">
                        <!-- Changes -->
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>

或者
             <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Grid>
                                <!-- Template -->
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="Content" Value="{x:Null}">
                                    <!-- Changes -->
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

使用触发器时有一些限制,有时您最终不得不为按钮创建一个新模板,如果您知道使用 xaml 相对容易且简单。

示例(我在这里有一个按钮,我正在更改他的图像):
 <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
                    <Image x:Name="imgBackground" Source="{StaticResource UpArrowImageNormal}" Stretch="None"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="imgBackground"
                                Property="Source" Value="{StaticResource UpArrowImageIsPressed}"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="imgBackground" Property="Source" Value="{StaticResource UpArrowImageDisabled}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

关于wpf - ListView 基于绑定(bind)值的不同控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11199999/

相关文章:

.net - WPF 3.5 中不一致的抗锯齿

wpf - 数据绑定(bind)和锁定列表

wpf - 资源字典定位器

c# - 多个 View 模型共享一个带有通知的服务

c# - 获取WPF中单击的矩形的名称

wpf - 将 WPFToolkit DataGrid 的事件绑定(bind)到 ModelView 的命令 (MVVM)

c# - Style.TargetType、对话框和子类化 WPF 控件

wpf - 从主窗口网格 WPF 中的用户控件打开用户控件

c# - WPF 在 Closing 事件中隐藏一个窗口防止应用程序终止

c# - 如何使用c#在DataGrid(WPF)中显示列表列表