首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF DataGridColumn条件控件

WPF DataGridColumn条件控件
EN

Stack Overflow用户
提问于 2014-05-12 22:55:07
回答 1查看 1.4K关注 0票数 2

我当前在我的数据网格中显示了一个具有以下DataGridHyperLinkColumn定义的超链接:

代码语言:javascript
复制
  <DataGridHyperlinkColumn Header="Item" Binding="{Binding Item, Mode=OneWay}">
    <DataGridHyperlinkColumn.ElementStyle>
      <Style>
        <EventSetter Event="Hyperlink.Click" Handler="ButtonItemInfo_OnClick"/>
      </Style>
    </DataGridHyperlinkColumn.ElementStyle>
  </DataGridHyperlinkColumn>

我想将其更改为有条件地显示超链接或标签(或文本块)。因此,如果绑定值是"SH",我想要显示标签。否则我想要超链接。

我如何才能做到这一点呢?

EN

回答 1

Stack Overflow用户

发布于 2014-05-12 23:30:28

我会将超级链接绑定到一个命令,并在CanExecute中有条件地返回false。您可以将超链接设置为禁用状态。

代码语言:javascript
复制
<DataGrid ItemsSource="{Binding Items}">
  <DataGrid.Columns>
    <DataGridTemplateColumn Header="Item">
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <TextBlock>
            <Hyperlink Command="{Binding DataContext.Navigate, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                       CommandParameter="{Binding}">                  
                 <TextBlock Text="{Binding}" />
            </Hyperlink>
        </TextBlock>
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
  </DataGrid.Columns>
</DataGrid>

和ViewModel:

代码语言:javascript
复制
    public ObservableCollection<string> Items
    {
        get;
        set;
    }

    public ICommand Navigate
    {
        get
        {
            return new RelayCommand(
                (param) => DoNavigate(param as string), // execute
                (param) =>                              // can execute
                {
                    var link = param as string;
                    return link != "SH";
                });
        }
    }

如果某些行确实需要textbox,可以在columns单元格样式中使用DataTrigger。

代码语言:javascript
复制
<DataGrid ItemsSource="{Binding Items}">
  <DataGrid.Columns>
    <DataGridTemplateColumn Header="Item">
      <DataGridTemplateColumn.CellStyle>
        <Style TargetType="DataGridCell">
          <Setter Property="Template">
            <Setter.Value>
             <!-- Template for normal rows -->
              <ControlTemplate>
                <TextBlock>
                  <Hyperlink Command="{Binding DataContext.Navigate, 
                               RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                             CommandParameter="{Binding}">                  
                    <TextBlock Text="{Binding}" />
                  </Hyperlink>
                </TextBlock>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
          <Style.Triggers>
            <DataTrigger Binding="{Binding}" Value="SH">
              <Setter Property="Template">
                <Setter.Value>
                  <!-- Template for SH rows -->
                  <ControlTemplate>
                    <TextBlock Text="{Binding}" />
                  </ControlTemplate>
                </Setter.Value>
              </Setter>
            </DataTrigger>
          </Style.Triggers>
        </Style>
      </DataGridTemplateColumn.CellStyle>

    </DataGridTemplateColumn>
  </DataGrid.Columns>
</DataGrid>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23612354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档