gpt4 book ai didi

c# - 如何通过 ViewModel 调用自定义控件的方法

转载 作者:行者123 更新时间:2023-11-30 22:11:19 24 4
gpt4 key购买 nike

我在我的项目中使用 MVVM 模式。它使用代码隐藏。

我遇到的问题是:在我的项目中,我有一个从 Simple WPF Page transitions 下载的页面转换控件。 .


它在代码隐藏中工作得很好,xaml 如下:

<Grid ShowGridLines="False">
<pageTransitions:PageTransition Name="pageTransitionControl" Margin="0" TransitionType="GrowAndFade" />
</Grid>

在窗口标签中加上这个:

xmlns:pageTransitions="clr-namespace:WpfPageTransitions;assembly=WpfPageTransitions" 


在我刚刚运行的代码隐藏中:

mast.Page mp = new mast.Page();
pageTransitionControl.ShowPage(mp);

当我执行下面的代码隐藏时,它会卸载当前页面 (mp) 并加载新页面 (dp)

dist.Page dp = new dist.Page();
pageTransitionControl.ShowPage(dp);

“mp”和“dp”上方是 UserControl(页面)的新实例。 pageTransitionControl 是 xaml 中转换控件的名称。

现在我想让它通过 ViewModel 运行,而不像上面那样与 View 通信,我该怎么做?

最佳答案

理想情况下,PageTransition 控件会为您提供一种通过绑定(bind)设置当前页面的方法。假设它没有提供这样做的方法,那么有很多方法可以实现这一点。

这里有三个建议,按照“好”的顺序(在我看来)。

  1. 您可以创建一个新的页面转换控件,它可以是 PageTransition 的包装器或继承它。然后将当前页面的 DependecyProperty 添加到您可以绑定(bind)到的类,捕获依赖属性更改事件并调用 ShowPage

  2. 根据用途编写继承FrameworkElementDependencyObject 的类,它可以绑定(bind)到页面和PageTransition 控件.然后,该类负责在当前页面更改时在绑定(bind)的 PageTransition 控件上调用 ShowPage

  3. PageTransition 控件绑定(bind)到模型上的属性,并让模型中的代码通过该属性访问控件。

例子:

public class MyPageTransition : ContentControl
{
public static readonly DependencyProperty CurrentPageProperty =
DependencyProperty.Register(
"CurrentPage",
typeof(object),
typeof(MyPageTransition),
new PropertyMetadata(DependencyPropertyChanged));

public ContentControl()
{
this.Content = this.pageTransition;
}

public object CurrentPage
{
get { return GetValue(CurrentPageProperty); }
set { SetValue(CurrentPageProperty, value); }
}

protected static void DependencyPropertyChanged(
DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
if (e.Property == CurrentPageProperty)
{
this.pageTransition.ShowPage(CurrentPage);
}
}

private PageTransition pageTransition = new PageTransition();
}

关于c# - 如何通过 ViewModel 调用自定义控件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20288976/

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