gpt4 book ai didi

WPF:设置用户控件数据上下文

转载 作者:行者123 更新时间:2023-12-03 10:12:32 26 4
gpt4 key购买 nike

我有以下 MainWindow布局左侧导航面板和右侧显示区域(两者都是 UserControls )。

有人可以解释如何分配 DataContext导航面板 ( LinksView.xaml ) 到 LinksViewModel.cs .我想将命令( BtnCompanyClickCommand )绑定(bind)到按钮并定义 BtnCompanyClickCommandLinksViewModel.cs .

我尝试了在 StackOVerflow 上找到的各种方法来设置 DataContext,但这些解决方案似乎都不起作用(绑定(bind) RelativeSource、命名 View 和绑定(bind)到名称等)。

MainWindow.xaml

<StackPanel Orientation="Horizontal">
<vw:LinksView DataContext="{Binding RelativeSource={RelativeSource Self}}"/>
<ContentControl Content="{Binding CurrentUserControl}" />

</StackPanel>

LinksView.xaml
<StackPanel Orientation="Vertical">
<Button Content="Company" Width="75" Margin="3" Command="{Binding ElementName=Links,Path=BtnCompanyClickCommand}" />
</StackPanel>

FormsDictionary.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:SidekickAdmin.ViewModel"
xmlns:vw="clr-namespace:SidekickAdmin.View">

<DataTemplate DataType="{x:Type vm:CompanySummaryViewModel}">
<vw:CompanySummaryView>
<ContentControl Content="{Binding }" />
</vw:CompanySummaryView>
</DataTemplate>

<DataTemplate DataType="{x:Type vm:LinksViewModel}">
<vw:LinksView />
</DataTemplate>

</ResourceDictionary>

编辑

所以我终于遇到了这个 explanation如何设置必须在 UserControl 的第一个子项上完成的 UserControl 的 DataContext。

这是修改后的 LinksView.xaml 有效。
<StackPanel Orientation="Vertical">
<StackPanel.DataContext>
<vm:LinksViewModel /> <!-- Bind the items in StackPanel to LinksViewModel -->
</StackPanel.DataContext>

<Button Content="Company" Width="75" Margin="3" Command="{Binding BtnCompanyClickCommand}" />
</StackPanel>

但是,我仍然不清楚为什么我必须设置子元素的 DataContext 而不是 UserControl,以及为什么 LinksView 的 DataTemplate(在 FormsDictionary.xaml 中设置)不与 LinksViewModel 的 DataContext 绑定(bind)。任何解释将不胜感激。

最佳答案

首先,您必须在 XAML 代码中引用您的 DataContext (LinksViewModel.cs)。
您可以通过直接实例化它或使用 ResourceDictionary 来做到这一点。在后一种情况下,您可以在某个 .cs 文件或 ResourceDictionary .xaml 文件中实例化您的 DataConext,并将其存储在一个命名的 ResourceDictionary 中,稍后您可以在其中找到引用。

其次,您只需要将 View 元素(如 LinksView.xaml)的 DataContext 属性与相应的 DataContext 相关联。

这是相当高级的,没有任何代码,但这是它背后的基本思想。

关于WPF:设置用户控件数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14117242/

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