【发布时间】:2011-03-09 17:05:00
【问题描述】:
public void AddProfile()
{
//Add conventions for DX Components.
Profile newProfile = new Profile()
{
Description = "New Profile",
DisplayOrder = decimal.MaxValue,
IsActive = true,
IsDefault = false,
IsSelected = true,
ProfileId = 0
};
EditProfileViewModel profile = new EditProfileViewModel(true) { Profile = newProfile };
if (windowManager.ShowDialog(profile,null ) ?? false) // ?? means (coallesce so if null use false value) the line means, if dialog returns true...
{
Profiles.Add(profile.Profile);
NotifyOfPropertyChange(string.Empty);
}
}
可以添加按钮的代码是这样的。
public bool CanAddAllToProfile
{
get
{
var p = Profiles.Where(x => x.IsSelected).FirstOrDefault();
if (p == null)
return false;
if (AvailableModules.Count() == 0)
return false;
return true;
}
}
public void AddAllToProfile()
{
var p = Profiles.Where(x => x.IsSelected).FirstOrDefault();
if (p == null)
return;
foreach (var m in AvailableModules)
p.Modules.Add(m);
NotifyOfPropertyChange(string.Empty);
}
如果我这样编写代码,CanAddAllToProfile 获取不会被执行。
如果我执行 NotifyOfPropertyChange(() => CanAddAllToProfile) 它会起作用
我也试过 Refresh();
我从 Screen 继承 viewmodel 任何想法我有一堆其他需要执行的 CanExecuteBindings。显然这可以解决,但我想知道我是否做错了什么。
【问题讨论】:
-
你是如何在 XAML 中进行连接的?点击按钮时 AddAllToProfile() 是否被命中?
-
这是 Caliburn Micro 还是完整的 Caliburn?
-
完整的caliburn,是的,当我单击按钮时它会被击中。我只是使用 x:name="AddAllToProfile" 连接它