代码之家  ›  专栏  ›  技术社区  ›  Álvaro García

我可以在多值转换器中获得视图模型的属性

  •  0
  • Álvaro García  · 技术社区  · 5 年前

    我有一个 DataGrid

    这是我的密码:

    <UserControl.Resources>
       <ResourceDictionary>
          <FrameworkElement x:Key="ProxyElement" DataContext="{Binding}" />
       </ResourceDictionary>
    <UserControl.Resources>
    
    <DataGridTextColumn.Visibility>
       <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
          <Binding Source="{StaticResource ProxyElement}" Path="DataContext.MyPropertyInViewModel" />
          <Binding Source="1"/>
       </MultiBinding>
    </DataGridTextColumn.Visibility> 
    
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
       //Do  the conversion
    }
    

    我需要代理元素从不属于可视树的元素访问视图模型。

    MultiBinding 1 ,但问题在于第一个元素。我不知道视图模型的属性,它是一个 string . 我得到一个 DependencyProperty.UnsetValue .

    如何将视图模型的属性传递给多值转换器?

    0 回复  |  直到 5 年前
        1
  •  1
  •   thatguy    5 年前

    这个 ProxyElement 不会在中绑定数据上下文 Resources 因为它不是可视化树的一部分。要使此工作正常,请定义 FrameworkElement 在可视树中的任何位置,例如 Grid . 这个 DataContext Visibility 委托书 Collapsed ,所以它是隐藏的。

    <Grid>
       <!-- ...grid definitions. -->
       <FrameworkElement Grid.Row="42" x:Name="ProxyElement" Visibility="Collapsed"/>
    </Grid>
    

    x:Reference ,自 ElementName 绑定只在可视树中工作,但列不是可视树的一部分。

    <DataGridTextColumn.Visibility>
       <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
          <Binding Source="{x:Reference ProxyElement}" Path="DataContext.InitialDepositAmount"/>
          <Binding Source="1"/>
       </MultiBinding>
    </DataGridTextColumn.Visibility>
    

    更好的方法是使用 Freezable related post BindingProxy ,也适用于 而且没有 x:参考 .