【问题标题】:WPF Reach to DataGridTextColumn's Binding info as stringWPF 以字符串形式到达 DataGridTextColumn 的绑定信息
【发布时间】:2016-07-10 16:36:24
【问题描述】:

我是 WPF 的新手。我卡在 XAML 的某个地方。此 XAML 代码正在运行:

<DataGridTextColumn Binding="{Binding Model.Name, UpdateSourceTrigger=PropertyChanged}">
  <DataGridTextColumn.CellStyle>
    <Style TargetType="{x:Type DataGridCell}">
      <Style.Triggers>
        <DataTrigger Value="False"
                     Binding="{Binding DataContext.Model.Error[All],
                                  RelativeSource={RelativeSource FindAncestor,
                                            AncestorType={x:Type DataGridRow}},
                                  Converter={StaticResource IsNull}}">
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border>
                  <Grid>
                    <ContentPresenter x:Name="_cp" />
                    <Image Source="{DynamicResource Img.Warning}"
                             ToolTip="{Binding DataContext.Model.Error[Name],
                                       RelativeSource={RelativeSource FindAncestor,
                                             AncestorType={x:Type DataGridRow}}" />
                  </Grid>
                </Border>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

我想从第一行的绑定信息中获取变量字符串,如“All”、“Name”,以便在图像工具提示绑定中使用。如您所见,第一行的绑定信息在这里是“Model.Name”。我可以使用 Converter 仅获取“名称”字符串,但无法获取该绑定信息。

当我搜索时,我发现了一个使用 MultiBinding 的建议,我写了这段代码:

<DataGridTextColumn Binding="{Binding Model.Name, UpdateSourceTrigger=PropertyChanged}">
  <DataGridTextColumn.CellStyle>
    <Style TargetType="{x:Type DataGridCell}">
      <Style.Triggers>
        <DataTrigger Value="False">
          <DataTrigger.Binding>
            <MultiBinding>
              <MultiBinding.Converter>
                <conv:DictionaryItemConverter />
              </MultiBinding.Converter>
              <Binding Path="DataContext.Model.Error"
                       RelativeSource="{RelativeSource FindAncestor,
                                        AncestorType={x:Type DataGridRow}}" />
              <Binding Path="?????" RelativeSource="?????" />
            </MultiBinding>
          </DataTrigger.Binding>

          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border>
                  <Grid>
                    <ContentPresenter x:Name="_cp" />
                    <Image Source="{DynamicResource Img.Warning}">
                      <Image.ToolTip>
                        <Binding>
                          ?????
                        </Binding>
                      </Image.ToolTip>
                    </Image
                  </Grid>
                </Border>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

但正如你所见,我一直坚持获取字符串信息。顺便说一句,DataContext.Model.Error 是一个像 Dictionary 类一样工作的类,DictionaryItemConverter 正在从这个类中获取价值

结果,我的问题是这样的。

如何以字符串形式获取 DataTextColumn 的绑定信息?

提前感谢您的所有回答。

P.S.:英语不是我的母语。如果我弄错了,对不起。

P.S.:我创建了一个示例来展示我想要的。你可以在这里下载:https://mega.nz/#!oIJXgLxb!eBNqOIdby0UgkKgfqgCOVqYE1O-KwQH7cfEQxk6aCd0

【问题讨论】:

    标签: c# wpf xaml binding datagridtextcolumn


    【解决方案1】:

    你可以试试这个:

        <DataTrigger Value="False">
          <DataTrigger.Binding>
            <MultiBinding>
              <MultiBinding.Converter>
                <conv:DictionaryItemConverter />
              </MultiBinding.Converter>
              <Binding Path="DataContext.Model.Error"
                       RelativeSource="{RelativeSource FindAncestor,
                                        AncestorType={x:Type DataGridRow}}" />
    
              <Binding RelativeSource="{RelativeSource FindAncestor,
                                        AncestorType={x:Type DataGridCell}}" />
            </MultiBinding>
          </DataTrigger.Binding>
    

    然后您到达当前单元格,然后在Binding 中查找DataContext 属性在DictionaryItemConverter 中。

    但这感觉就像你做的事情太复杂了。也许您可以修改您的问题以显示您的总体目标和 ViewModel 中涉及的属性。

    【讨论】:

    • 谢谢你,Markus,我可以用这种方式做到这一点,但这不是我想要的。我想获取 DataGridTextColumn 绑定的属性名称。不值。值可以是任何东西。但我需要以字符串形式获取“Model.Name”、“Model.Explanation”、“Model.All”等信息。在转换器中,检查 DataContext.Model.Error(像 Dictionary 这样的类)是否有这个键: string v = DataContext.Model.Error['Name'];返回 !string.IsNullOrWhiteSpace(v);如果我可以将属性名称(如“Model.Name”)作为字符串,那么我可以拆分并使用它。
    • 所以你只想要一个解决方案,不必重复所有相同的东西,只改变 AllName ??
    • 我仍然无法理解这一切,您的 ViewModel 看起来如何?如果 Dictionary 中只有几个这样的属性,为什么还要使用 Dictionary 而不是像 AllErrorsNameErrors 这样的单独属性?
    • 感谢所有有趣的 Markus。它不起作用,仍然。让我解释一下为什么我有一个(类)字典。我尝试使用 IDataErrorInfo 进行错误验证。但是我在没有任何信息的情况下遇到了关于添加新行的错误。我决定编写自己的错误类。这种字典类就是为此而生的。它包含我需要的任何错误信息。我在我的问题中添加了一个示例项目。如果你能看到它,也许你会明白的。顺便说一句,在示例中,您会看到一些土耳其语解释。在 MainWindow.xaml 中,1.exp。是说'它工作正常'。 2.exp。说“不”。
    猜你喜欢
    • 2013-12-10
    • 2013-10-05
    • 1970-01-01
    • 2011-10-20
    • 2017-01-11
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多