【问题标题】:Change DataContext of specific property inside control - WPF更改控件内特定属性的 DataContext - WPF
【发布时间】:2013-03-03 20:28:53
【问题描述】:

我有用户控件,其中包含带有 WaterMark 的 TextBox

<AdornerDecorator>
                        <TextBox 
                            Height="20" 
                            Margin="10,0" 
                            Grid.Column="0" 
                            Text="{Binding MainCategoryTextBoxValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Name="MainCatTextBox">

                            <controls:WatermarkService.Watermark>
                                <TextBlock VerticalAlignment="Center" x:Name="MainCategoryTextBlock"> </TextBlock>
                            </controls:WatermarkService.Watermark>
                        </TextBox>
</AdornerDecorator>

你可以在这里看到 WatermarkService 的实现 https://stackoverflow.com/a/836463/1548347

我想在&lt;controls:WatermarkService.Watermark&gt; 中获取“MainCategoryTextBlock”文本块并将其 DataContext 设置为与我的 UserControl DataContext 相同,以便从我的 ViewModel 更改 RunTime 中的水印文本。

我尝试将带有 RelativeSource 的“MainCategoryTextBlock”DataContext 绑定到我的 UserControl DataContext 但我没有成功(可能是语法错误 - 我不确定)。

DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 

你知道我该如何解决吗?

谢谢

【问题讨论】:

    标签: wpf mvvm datacontext


    【解决方案1】:

    如果你的 UserControl 有一个名字,那么你可以这样做:

    DataContext={Binding ElementName="YourUserControlName", Path=DataContext}
    

    但我可以看到您在装饰器中使用您的文本框,因此在这种情况下您不能使用 FindAncestor,因为您的文本框和 UserControl 不属于同一个可视化树。

    【讨论】:

    • 我尝试提供我的 UserControl 名称,但收到下一条消息:
    • 哦,对不起。这是消息:错误 2:类型名称“视图”在类型“DataPresenterModule.DataPresenterModule”中不存在。同时我以其他方式解决了问题,但我仍然很好奇如何以这种方式解决它
    • @Ofir 我对这些信息帮不上什么忙,如果您的问题已经解决并且您仍然想讨论我提出的解决方案,那么请在聊天中与我见面。
    【解决方案2】:

    您应该将窗口的数据上下文属性设置为视图模型,并将文本块的文本属性绑定到视图模型属性。

    <TextBlock Text={Binding Path=PropertyOnViewModel} />
    

    【讨论】:

    • 我不能使用这种方法。我从隐藏的代码(我的基于 PRISM 的应用程序)设置视图的数据上下文。如果我将从我的视图中创建实例并按照您的建议进行操作,我将获得我的 ViewModel 的 2 个实例。
    猜你喜欢
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2014-08-15
    • 2015-09-18
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多