gpt4 book ai didi

c# - 如何覆盖 ViewModel DataContext 以便我可以绑定(bind)到 View (Mvvm-Light) 中的对象?

转载 作者:行者123 更新时间:2023-11-30 14:41:01 26 4
gpt4 key购买 nike

我正在使用 Mvvm-Light,并且一直忽略 XAML 中的绑定(bind)是如何工作的,直到现在。

这是我的 XAML

<phone:PhoneApplicationPage.Resources>
</phone:PhoneApplicationPage.Resources>

<Grid x:Name="LayoutRoot" Background="Transparent">

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,14">
<TextBlock x:Name="ApplicationTitle" Text="{Binding SecuritySystemName}" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="{Binding PageName}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>

<TextBlock Name="textCode"
DataContext="{WHAT GOES HERE to bind to properties on my View (SecurityPanelPage class)}"
Text="{Binding Path=Code}" />

</Grid>

{Binding SecuritySystemName} 和 {Binding PageName} 正确绑定(bind)到我的 ViewModel (SecuirtyPanelViewModel)。但我希望 TextBlock 元素中的 {Binding Code} 绑定(bind)到我的 VIEW(而不是 ViewModel)。

我搜索并搜索了说明 DataContext 和 Binding 支持的语法和值的文档和示例。没有任何帮助。

我只想知道如何设置 DataContext(或在 {Binding ...} 中指定指向我的 View 对象的东西。我已经尝试过“Self”和各种“RelativeSource”东西, 但都没有用。猜测是无效的,因为在解析 XAML 之前到调试器的往返时间太长。

谢谢。

更新 - 我找到了一个让我感动的答案,但我仍然没有理解,所以我对下面的精美海报有跟进问题..

这是有效的:

<phone:PhoneApplicationPage x:Name="ThisPage">
<TextBlock Name="textCode" Text="{Binding Code, ElementName=ThisPage"/>
</phone:PhoneApplicationPage>

我在这里找到了这个提示:http://bursjootech.blogspot.com/2007/12/bind-from-xaml-to-local-property-in.html

他提出了不同的问题:如何“在代码隐藏中从 XAML 绑定(bind)到本地属性”。

我仍然不明白下面提供的两个解决方案。下面还有更多问题...

最佳答案

通常,当您使用 MVVM 时,几乎所有可绑定(bind)属性都在您的 ViewModel 上,而不是在您的 View 上。但是,显然有时您希望创建具有属性的组件控件。您能解释一下该属性是什么以及为什么它只需要是 View 上的属性吗?

话虽这么说......我猜你的 SecurityPanelPage 是显示的 XAML 的 View ?

您可以为您的控件命名,然后使用 ElementName 绑定(bind)。这样您就不需要设置 DataContext。

<phone:PhoneApplicationPage
x:Name="controlName"
x:Class="SomeNamespace.SecurityPanelPage">
</phone:PhoneApplicationPage>

然后您的绑定(bind)更改为:

<TextBlock
Name="textCode"
Text="{Binding Path=Code, ElementName=controlName}" />

要显式设置 DataContext,您可以执行以下操作:

<TextBlock
Name="textCode"
DataContext="{Binding ElementName=controlName}"
Text="{Binding Path=Code}" />

关于c# - 如何覆盖 ViewModel DataContext 以便我可以绑定(bind)到 View (Mvvm-Light) 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4721815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com