我正在構建WPF MVVM應用程序,但我在從子視圖模型更新父視圖時遇到問題。從子MVVM更新父視圖
我在我的父視圖模型上調用了doAction()方法,它更新了一個屬性並引發了一個PropertyChangeEvent。當從MainViewModel調用此方法時,一切都很好,但是當我從子視圖模型調用相同的方法時,PropertyChangedEvent get引發,但視圖不更新。
例子:
ChildViewModel()
{
private ParentViewModel parent;
parent.doAction(); // Raised event but MainView doesn't update
}
ParentViewModel()
{
public void doAction()
{
this.Property = true;
OnPropertyChange("Property");
}
}
我的意見是使用XAML創建:
<MainView>
<TabItem>
<view:ChildView/>
</TabItem>
</MainView>
屬性格式更改事件引發像這樣:
protected void OnPropertyChanged(string name)
{
LOGGER.Info("Property Changed: " + name);
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
我的問題是我怎麼得到父視圖來監聽和更新由子視圖引發的屬性更改事件。
編輯:
基類:
public abstract class AbstractBaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public ICommand CloseCommand { get; set; }
public AbstractBaseViewModel()
{
this.CloseCommand = new CloseCommand(this);
}
public void CloseWindow()
{
Application.Current.MainWindow.Close();
}
protected void OnPropertyChanged(string name)
{
LOGGER.Info("Property Changed: " + name);
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
父視圖模型:
public class ParentViewModel : AbstractBaseViewModel
{
private Dispatcher dispatcher;
private bool visible;
public bool Visible
{
get { return visible; }
set { visible= value; OnPropertyChanged("Visible"); }
}
public MainWindowViewModel()
{
this.dispatcher = Dispatcher.CurrentDispatcher;
this.manager = manager;
}
public void ShowTab(){
this.Visible = true;
}
}
子視圖型號:
public class ChildViewModel : AbstractBaseViewModel
{
private ParentViewModel parentVm;
public GeneralViewModel(ParentViewModel vm)
{
this.parentVm= vm;
}
public void Command(){
vm.ShowTab();
}
}
ParentView的XAML:
<TabItem Header="ViewWeWantToHide/Show"
Visibility="{Binding Visible,Converter={converter:BooleanToVisibilityConverter}}">
<views:SomeOtherView/>
</TabItem>
<TabItem Header="ChildView Tab">
<views:ChildView/>
</TabItem>
我沒有看到你的代碼中的任何問題(除非你在提高,改變屬性的功能'PropertyChanged'事件,而不是的財產二傳手)。請發佈完整的代碼,並提供更多描述。 –
發佈XAML以向我們展示您使用該「Property」的位置。 – sthotakura
愚蠢的問題,但你絕對派生自你的ParentViewModel INotifyPropertyChanged? – GazTheDestroyer