gpt4 book ai didi

wpf - 将数据传递给 mvvm 用户控件

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

我正在使用 MVVM 模式在 WPF/c# 中编写一个表单,并尝试与用户控件共享数据。 (嗯,用户控制 View 模型)

我要么需要:

  • 在 parent 中创建一个 View 模型并将其绑定(bind)到 User Control
  • 将某些类与 Xaml 中的 View 模型绑定(bind)
  • 被告知用户控件不是与 MVVM 一起使用并被推向正确方向的方法。 (我见过数据模板,但它们看起来并不理想)

  • 用户控件仅用于使大型表单更易于管理,因此我不确定这是否是 MVVM 的方式,这正是我过去会这样做的方式。

    我想在 Xaml 中传递一个 VM 构造类。
    <TabItem Header="Applicants">
    <Views:ApplicantTabView>
    <UserControl.DataContext>
    <ViewModels:ApplicantTabViewModel Client="{Binding Client} />
    </UserControl.DataContext>
    </Views:ApplicantTabView>
    </TabItem>

    public ClientComp Client
    {
    get { return (ClientComp)GetValue(ClientProperty); }
    set { SetValue(ClientProperty, value); }
    }

    public static readonly DependencyProperty ClientProperty = DependencyProperty.Register("Client", typeof(ClientComp),
    typeof(ApplicantTabViewModel),
    new FrameworkPropertyMetadata
    (null));

    但我似乎无法获得一个依赖属性来接受非静态内容。

    这对我来说已经有一段时间了,但假设我会发现但失败了,所以我在这里。

    提前致谢,
    奥利

    最佳答案

    Oli - 如果 UI 变得太大,可以(实际上 - 推荐)将 View 的部分拆分为 UserControl - 如果 VM 变得太大,您可以独立地将 View 模型拆分为 subview 模型。

    尽管您似乎正在对子 VM 进行双重实例化。也没有必要在你的虚拟机中创建依赖属性(实际上,我认为这是错误的)。

    在您的外部 VM 中,只需让 ClientComp 具有常规属性。如果您不打算更改它 - setter 甚至不必触发属性更改事件,尽管建议这样做。

    public class OuterVm
    {
    public ClientComp Client { get; private set; }

    // instantiate ClientComp in constructor:
    public OuterVm( ) {
    Client = new ClientComp( );
    }
    }

    然后,在 XAML 中,放置申请人TabView,并绑定(bind)其数据上下文:
    ...
    <TabItem Header="Applicants">
    <Views:ApplicantTabView DataContext="{Binding Client}" />
    </TabItem>

    关于wpf - 将数据传递给 mvvm 用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9548812/

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