我无法在多值转换器中获取视图模型的 属性
I can't get the property of the view model in the multi value converter
我有一个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
.
如何将视图模型的 属性 传递给多值转换器?
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
的方法,该方法也适用于 Resources
而没有 x:Reference
。
我有一个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
.
如何将视图模型的 属性 传递给多值转换器?
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
的方法,该方法也适用于 Resources
而没有 x:Reference
。