如何在 MVVM Light Toolkit 中的另一个 ViewModel 的 ViewModel 中设置 属性
How do I set a property in a ViewModel from another ViewModel in MVVM Light Toolkit
我有一个包含几个 TextBox 元素和一个进度条的表单。我希望在 TextBox 分配了一些值时更新进度条。
所以当设置 属性 时,我尝试增加 ProgressPercent
,但实际上不起作用。我错过了什么,为什么我不能从另一个 ViewModel 访问 ProgressPercent
?
MainViewModel.cs
public class MainViewModel : ViewModelBase
{
private int progressPercent { get; set; }
public MainViewModel()
{
}
public int ProgressPercent
{
get
{
return this.progressPercent;
}
set
{
this.progressPercent = value;
this.RaisePropertyChanged(() => this.ProgressPercent);
}
}
}
FooterViewModel
public class FooterViewModel : ViewModelBase
{
private string firstName { get; set; }
private string lastName { get; set; }
public FooterViewModel()
{
}
public string FirstName
{
get
{
return this.firstName;
}
set
{
this.firstName = value;
this.RaisePropertyChanged(() => this.FirstName);
Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
ProgressPercent += 10;
});
}
}
public string LastName
{
get
{
return this.lastName;
}
set
{
this.lastName = value;
this.RaisePropertyChanged(() => this.LastName);
Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
ProgressPercent += 10;
});
}
}
}
HeaderViewModel.cs
public class HeaderViewModel : ViewModelBase
{
private string address { get; set; }
private int age { get; set; }
public HeaderViewModel()
{
}
public string Address
{
get
{
return this.address;
}
set
{
this.address = value;
this.RaisePropertyChanged(() => this.Address);
Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
ProgressPercent += 10;
});
}
}
public int Age
{
get
{
return this.age;
}
set
{
this.age = value;
this.RaisePropertyChanged(() => this.Age);
Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
ProgressPercent += 10;
});
}
}
}
问题 Accessing a property in one ViewModel from another 没有什么不同,但由于某种原因那里的解决方案对我不起作用
其实答案就在这里
Accessing Properties in other ViewModels in MVVM Light
您通常必须建立某种类型的通信基础结构才能在 ViewModel 之间进行通信。您是否正在使用任何类型的内置支架的 Mediator 或 MVVM 框架?
或者,您可以在 class 中设置一个 属性,所有这些视图模型都可以访问,这可能引发其他 ViewModel 正在订阅的事件。
我有一个包含几个 TextBox 元素和一个进度条的表单。我希望在 TextBox 分配了一些值时更新进度条。
所以当设置 属性 时,我尝试增加 ProgressPercent
,但实际上不起作用。我错过了什么,为什么我不能从另一个 ViewModel 访问 ProgressPercent
?
MainViewModel.cs
public class MainViewModel : ViewModelBase
{
private int progressPercent { get; set; }
public MainViewModel()
{
}
public int ProgressPercent
{
get
{
return this.progressPercent;
}
set
{
this.progressPercent = value;
this.RaisePropertyChanged(() => this.ProgressPercent);
}
}
}
FooterViewModel
public class FooterViewModel : ViewModelBase
{
private string firstName { get; set; }
private string lastName { get; set; }
public FooterViewModel()
{
}
public string FirstName
{
get
{
return this.firstName;
}
set
{
this.firstName = value;
this.RaisePropertyChanged(() => this.FirstName);
Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
ProgressPercent += 10;
});
}
}
public string LastName
{
get
{
return this.lastName;
}
set
{
this.lastName = value;
this.RaisePropertyChanged(() => this.LastName);
Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
ProgressPercent += 10;
});
}
}
}
HeaderViewModel.cs
public class HeaderViewModel : ViewModelBase
{
private string address { get; set; }
private int age { get; set; }
public HeaderViewModel()
{
}
public string Address
{
get
{
return this.address;
}
set
{
this.address = value;
this.RaisePropertyChanged(() => this.Address);
Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
ProgressPercent += 10;
});
}
}
public int Age
{
get
{
return this.age;
}
set
{
this.age = value;
this.RaisePropertyChanged(() => this.Age);
Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
ProgressPercent += 10;
});
}
}
}
问题 Accessing a property in one ViewModel from another 没有什么不同,但由于某种原因那里的解决方案对我不起作用
其实答案就在这里 Accessing Properties in other ViewModels in MVVM Light
您通常必须建立某种类型的通信基础结构才能在 ViewModel 之间进行通信。您是否正在使用任何类型的内置支架的 Mediator 或 MVVM 框架?
或者,您可以在 class 中设置一个 属性,所有这些视图模型都可以访问,这可能引发其他 ViewModel 正在订阅的事件。