C# XAML&;IValueConverter-首先转换为复杂对象,然后绑定到结果的属性路径
我正在使用XAML为“LayoutAchorableItem”类型的对象设置样式。 此类包含类型为object的属性“Model”。我想使用IValueConverter将其转换为XAML中的IVible类型:C# XAML&;IValueConverter-首先转换为复杂对象,然后绑定到结果的属性路径,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我正在使用XAML为“LayoutAchorableItem”类型的对象设置样式。 此类包含类型为object的属性“Model”。我想使用IValueConverter将其转换为XAML中的IVible类型: public class LayoutAnchorableItem { object Model { get; } // .. other properties & methods .. } public interface IVisible { bool isV
public class LayoutAnchorableItem
{
object Model { get; }
// .. other properties & methods ..
}
public interface IVisible
{
bool isVisible { get; set; }
// .. other properties ..
}
public class ObjectToIVisibleConverter : IValueConverter
{
// ...
// "Converts" LayoutAnchorableItem.Model to IVisible by looking up the model's reference in an internal dictionary
}
然后,我想使用生成的IVible对象并将其isVisible属性数据绑定到我的样式设置器:
<ad:DockingManager.LayoutItemContainerStyleSelector>
<view:PanesStyleSelector>
<view:PanesStyleSelector.ToolStyle>
<Style TargetType="{x:Type ad:LayoutAnchorableItem}">
<!-- PSEUDO-CODE! I cant use {Binding ...} inside a {Binding ...} -->
<Setter Property="Visibility" Value="{Binding {Binding Model, Converter={StaticResource ObjectToIVisibleConverter}}.isVisible, Converter={StaticResource BoolToVisibilityConverter}}"/>
</Style>
</view:PanesStyleSelector.ToolStyle>
</view:PanesStyleSelector>
</ad:DockingManager.LayoutItemContainerStyleSelector>
但是如何在XAML中实现这一点
我只见过IValueConverters如何将复杂对象转换为基本类型(字符串、双精度等)的示例,但我是否也可以使用它将对象转换为另一个不同类型的对象,然后绑定到其属性之一
否则,还有其他办法吗?我曾考虑过包含另一个元素,但也没有成功(加上更改整个元素的DataContext可能不是很明智…)
至于我为什么要这样做:这是一个阿瓦隆托克元素风格的定居者。
但是,我的视图模型不包含任何特定于AvalonDock的属性(例如isVisible),因此我需要单独存储它们,例如,在字典