我已经设置了业务逻辑来处理客户端软件与服务器软件的连接。
BL封装在此界面中:
public interface IServerConnectionLogic
{
IObservable<bool> Connected { get; }
Task Connect();
//...
}
在我的viewmodel(基于ReactiveObject)中,我创建了应该触发服务器连接的命令:
CmdConnectToService = new ReactiveCommand(ServerConnectionLogic.Connected.Select(connected => !connected));
CmdConnectToService.Subscribe(_ => ServerConnectionLogic.Connect());
该命令绑定到UI-XAML中的按钮。
按下按钮时,会点击订阅的lamda并调用“Connect”方法。 在Observable内部,“已连接”设置为“真实。
此外,还会触发ReactiveCommand构造函数的“CanExecute”参数中的lambda。
但是UI没有更新。我希望按钮被禁用,可观察的“已连接”变为“真”,而“选择”语句反转我的布尔值......
我曾尝试使用WpfToolkit中的“RibbonButton”以及“普通”按钮。两者都没有得到更新。
同样的IObservable也绑定到成员字段:
m_ServerConnected = new ObservableAsPropertyHelper<bool>(ServerConnectionLogic.Connected, _ => raisePropertyChanged("ServerConnected"));
而“m_ServerConnected”通过属性绑定到CheckBox(用于测试)。那个工作正常,所以观察者必须工作......
有没有人知道我的问题是什么?