【问题标题】:How to apply MVVM correctly in this case?在这种情况下如何正确应用 MVVM?
【发布时间】:2012-06-06 05:14:44
【问题描述】:

我正在将应用程序从 Windows 窗体迁移到 WPF,因此我尝试使用 MVVM 模式,但它对我来说有点棘手。

在 Windows 窗体中,我有一个包含 progressBar 的窗体,它定义了一些新方法,允许我执行步骤、设置其值等。此代码位于 progressBar 的代码后面,如下所示:

public class MyProgressBar : ProgressBar
{
    public MyProgressBar ()
    {
        InitializeComponent();
    }

    public void Method01()
    {...}

    public void Method02()
    {...}

    public void Method03()
    {...}
}

Method01、Method02、Method03的代码是用在容器表单中的,所以,我的问题是:在WPF中,既然我使用MVVM模式,那我该把代码放在哪里呢??

到目前为止,我有这些课程:

我的模特:

public class MyFormModel : DataTable
{
    public OutputResultsDataTable()
        : base()
    {
        Columns.Add(new DataColumn("Number"));
        Columns.Add(new DataColumn("Message"));
        Columns.Add(new DataColumn("Detail"));
    }
}

我的视图模型:

public class MyNewWPFForm
{
    /// <summary>
    /// 
    /// </summary>
    public MyFormModel MyData{ get; set; }

    /// <summary>
    /// Constructor
    /// </summary>
    public MyNewWPFForm()
    {
        if (System.Windows.Application.Current.MainWindow != null)
        {
            MyData= new MyFormModel ();                
        }
    }
}

在 WPF 中,我已经创建了新的 progressBar 控件及其容器表单,即使我一直在阅读有关 MVVM 的内容,但我不明白我必须将 Method0X 的代码放在哪里,因为根据我所阅读的内容,我必须将该代码放在 viewModel 中,但是,这里还有另一个问题:我怎么能从我的视图模型中访问我的进度条,因为它在另一个表单中??

希望有人可以帮助我。提前致谢。

【问题讨论】:

  • Method01,2,3应该做什么?
  • 我认为这篇文章会对你有所帮助:stackoverflow.com/questions/1619505/…
  • @DaveHillier,由于我有一个 listView,Method0X 允许我直接插入行、将内容复制到剪贴板、在进度条中执行一个步骤等

标签: c# wpf mvvm


【解决方案1】:

听起来您控件上的方法用于设置控件的状态。您可以使用dependency properties 来执行此操作。

您使用绑定将您的视图连接到您的视图模型。

为您的控件进度创建一个属性。

然后在Xaml中添加一个绑定

<MyProgressBar Progress="{Binding CurrentProgress}" />

将视图的数据上下文设置为新的视图模型。 CurrentProgress 是视图模型上的一个属性。 在您的视图模型上实现INotifyPropertyChanged

要在控件中添加和删除内容,您可以ObservableCollection

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2013-11-21
    相关资源
    最近更新 更多