不知道是否可以这样做 - 或者在哪里看(所以我在这里:))。
我有一个userControl,EditorView,它在XAML中实现,如:
<v:EditorView Grid.Row="3"
DataContext="{Binding Editor}"
FontSize="100"
FontWeight="Bold" />
现在,用户控件EditorView通过以下方式接收这些值:
<SimpleTextBlock
Background="#FFE24848"
FontSize="{Binding FontSize, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
FontWeight="{Binding FontWeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
/>
一旦进入自定义控件SimpleTextBlock,我希望customcontrol将其FontSize,FontWeight等的值发送到usercontrol的viewmodel,以便在某些计算中使用。 (我可能会补充一点,我需要XAML实现后自定义控件中的值来获取它创建的实际值)。
所以问题是:
提前感谢您的帮助。
答案 0 :(得分:1)
由于SimpleTextBlock是一个自定义控件,只需向其添加一个或两个额外的依赖项属性,称为DataBoundFontSize和DataBoundFontWeight。然后重写OnApplyTemplate,在其上执行FontSize和FontWeight的值应该已经设置并将它们的值设置为DataBoundFontSize和DataBoundFontWeight。为了安全起见,如果FontSize和FontWeight稍后更改,您还应该订阅这些属性中的更改并保持其他属性的同步。
最后,将绑定应用于您的视图模型:
<SimpleTextBlock
Background="#FFE24848"
FontSize="{Binding FontSize, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
FontWeight="{Binding FontWeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
DataBoundFontSize="{Binding Path=FontSizeOnViewModel}"
DataBoundFontWeight="{Binding Path=FontWeightOnViewModel}"
/>
如果这不是自定义控件,我会创建一个自定义操作/行为来监视您感兴趣的属性,然后通过使用依赖项属性的数据绑定将值发送到视图模型。
现在,出于好奇,我相信FontSize和FontWeight会自动继承到可视化树中包含的控件,所以您是否尝试查看FontSize和FontWeight是否继承到您的自定义控件而没有绑定?如果是这种情况那么你就不需要所有这些复杂性,你可以从那里绑定到视图模型。