我目前有两个窗口,我的主应用程序窗口然后我有一个“编辑器”窗口,用于更改TreeView中的某些内容(这些是部门)我最近实现了隐藏所有子部门/显示的功能,但是我有一个问题,如果我隐藏/显示所有这些只有原始选择将隐藏/显示,直到我使用我的刷新功能...所以我的问题是..无论如何,我可以设置我的接受按钮编辑器导致刷新我的页面因为这些都是两个单独的文件我似乎无法访问名为“explorer”的TreeView
我当前的刷新方式如何:
public void RefreshData()
{
explorer.Items.Clear();
using (new SessionConnecter(session))
{
var topLevelDepartments = session.CreateCriteria(typeof(Department))
.Add(NHibernate.Expression.Expression.Eq(Department.IS_TOP_LEVEL, true))
.List<Department>();
foreach (Department d in topLevelDepartments)
{
explorer.Items.Add(Fabric.ObjectProvider.Get<INodeWrapperFactory>().Create(d));
}
}
}
目前的保存代码:
void Save(object sender, ExecutedRoutedEventArgs e)
{
FocusManager.SetFocusedElement(GetWindow(savebutton), savebutton);
if (!session.IsConnected)
session.Reconnect();
try
{
if (ValidateModel())
{
session.Save(model);
if (pendingParent != null)
{
model.Parent = pendingParent;
// session.Save(pendingParent); - should cascade
}
session.Flush();
Close();
}
}
catch (NHibernate.Classic.ValidationFailure ex)
{
if (pendingParent != null)
session.Refresh(pendingParent);
if (session.IsConnected)
session.Disconnect();
MessageBox.Show(this, ex.Message, this.Title, MessageBoxButton.OK, MessageBoxImage.Warning);
}
}
答案 0 :(得分:0)
如果要将两个视图绑定到同一个对象,则正在更改的对象应该只是引发OnProperyChanged事件。如果视图绑定到两个不同的对象(ViewModel),但那些ViewModel共享相同的Model,您可能希望从另一个ViewModel通知模型已更改的一个ViewModel。
答案 1 :(得分:0)
在这种情况下,解决方案可能是使用消息。你看过Mvvm Light Toolkit的消息吗?这是一种沟通距离对象,其他窗口等的好方法。您可以实现自我消息机制,通过创建一个静态类(对所有应用程序都相同)然后实现您自己的订阅/调用机制...希望对您有所帮助。