Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 我能';无法在多值转换器中获取视图模型的属性_Wpf_Datagrid_Imultivalueconverter - Fatal编程技术网

Wpf 我能';无法在多值转换器中获取视图模型的属性

Wpf 我能';无法在多值转换器中获取视图模型的属性,wpf,datagrid,imultivalueconverter,Wpf,Datagrid,Imultivalueconverter,我有一个DataGrid。我想决定何时折叠一个列以及何时显示它 这是我的代码: <UserControl.Resources> <ResourceDictionary> <FrameworkElement x:Key="ProxyElement" DataContext="{Binding}" /> </ResourceDictionary> <UserControl.Resou

我有一个
DataGrid
。我想决定何时折叠一个列以及何时显示它

这是我的代码:

<UserControl.Resources>
   <ResourceDictionary>
      <FrameworkElement x:Key="ProxyElement" DataContext="{Binding}" />
   </ResourceDictionary>
<UserControl.Resources>
我需要代理元素从不属于可视树的元素访问视图模型

在多绑定中,第二个绑定工作。在转换器中,我接收到值
1
,但问题在于第一个元素。我没有得到视图模型的属性,即它是一个
字符串
。我得到一个
dependencProperty.unset值


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

ProxyElement不会绑定
资源中的数据上下文,因为它不是可视化树的一部分。要实现这一点,请在可视化树中的任意位置定义
框架元素
,例如,如下所示的
网格
DataContext
是继承的,但您也可以显式设置它。将代理的
可见性设置为
折叠
,使其隐藏

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

更好的方法是使用
Freezable
作为绑定代理。即使在可视化树之外,它们也可以访问数据上下文。请参阅此图,其中显示了一种使用自定义
BindingProxy
的方法,该方法也适用于
资源
,而不适用于
x:Reference

,感谢我提出的解决方案和更好解决方案的建议。
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
   //Do  the conversion
}
<Grid>
   <!-- ...grid definitions. -->
   <FrameworkElement Grid.Row="42" x:Name="ProxyElement" Visibility="Collapsed"/>
</Grid>
<DataGridTextColumn.Visibility>
   <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
      <Binding Source="{x:Reference ProxyElement}" Path="DataContext.InitialDepositAmount"/>
      <Binding Source="1"/>
   </MultiBinding>
</DataGridTextColumn.Visibility>