【问题标题】:Binding to a property outside DataGrid绑定到 DataGrid 外部的属性
【发布时间】:2018-07-26 08:59:06
【问题描述】:

我有多个 DataGridTemplateColumn 的 DataGrid。在其中一列中,我有一个按钮,当用户选择行时以及如果 CodeFonc 等于 1 时显示该按钮。(CodeFonc 不是 DataGrid/SelectedItem 的一部分)

视图模型:

   private int _codeFonc;
    public int CodeFonc
    {
        get { return _codeFonc; }

        set
        {
            _codeFonc = value;
            NotifyOfPropertyChange("CodeFonc");
        }
    }

XAML:

 <MultiDataTrigger>
   <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsSelected}" Value="True"/>
        <Condition Binding="{Binding Path=CodeFonc, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Value="1" />
    </MultiDataTrigger.Conditions>
   <Setter Property="Button.Visibility" Value="Visible" />
     </MultiDataTrigger>

我正在从另一个窗口获取 CodeFonc,但我 100% 确定它的值为 1,因为我在调试时确认了。

最重要的是: 如果我将 CodeFonc 替换为 DataGrid (SelectedItem) 本身的任何内容,则该按钮将显示正常。所以我的猜测是,因为上面的 XAML 在 DataGrid 内部,它会以某种方式限制它?

【问题讨论】:

  • 您需要绑定 CodeFonc 有点不同,因为在 DataGrid 内部没有直接访问“全局”DataContext-only 到本地项目。请查看These-Answer 如果点击这些链接您无法执行这些操作,请告诉我,我会写一个完整的答案。
  • @Kaspar 工作!谢谢。
  • 你在xaml中设置了DataContext吗?

标签: c# wpf


【解决方案1】:

如果 DataContext 没有在 xaml 中设置,您可以将其设置为 ViewModel,如下所示:

<Window.DataContext>
    <local:ViewModel/>
</Window.DataContext>

ViewModel 是 ViewModel 的名称。

【讨论】:

    猜你喜欢
    • 2013-03-22
    • 1970-01-01
    • 2016-11-05
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    相关资源
    最近更新 更多