我正在将应用程序从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"));
}
}
我的ViewModel:
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中,但是,这是另一个问题:我怎么能从我的视图模型访问我的进度条,因为它在另一个表单中?
希望有人可以帮助我。提前谢谢。
答案 0 :(得分:2)
听起来您的控件上的方法用于设置控件的状态。您可以使用dependency properties执行此操作。
您使用绑定将视图连接到视图模型。
为控件进度创建一个属性。
然后在Xaml中添加一个绑定
<MyProgressBar Progress="{Binding CurrentProgress}" />
将视图的数据上下文设置为新的视图模型。 CurrentProgress是视图模型上的属性。 在您的视图模型上实施INotifyPropertyChanged。
要向控制中添加和删除内容,您可以ObservableCollection。