But*_*ers 2 wpf visibility system.reactive canexecute reactiveui
我的xaml中有几个Tiles(TileLayoutControl类)(本例中只显示了2个),其可见性绑定到布尔属性并通过BooleanToVisibilityConverter转换.
这很好用.我的问题是
我可以将可见性绑定到Command,以便我可以删除那些几个布尔属性的需要吗?
类似于将Visibility绑定到Command.CanExecute的东西
如果是,我该如何实现?任何帮助将非常感谢!谢谢.
<dxlc:Tile Command="{Binding Tile1Command}"
Visibility="{Binding Path=IsTile1Visible , Converter={StaticResource BooleanToVisibilityConverter}}"/>
<dxlc:Tile Command="{Binding Tile2Command}"
Visibility="{Binding Path=IsTile2Visible , Converter={StaticResource BooleanToVisibilityConverter}}"/>
Run Code Online (Sandbox Code Playgroud)
视图模型
private bool _isTile1Visible;
public bool IsTile1Visible
{
get { return _isTile1Visible; }
set { this.RaiseAndSetIfChanged(ref _isTile1Visible, value); }
}
public ReactiveCommand Tile1Command { get; private set; }
Tile1Command = new ReactiveCommand();
Tile1Command.Subscribe(p => PerformTile1Operation());
Run Code Online (Sandbox Code Playgroud)
是的,只需使用RxUI绑定:
<dxlc:Tile x:Name="Tile1" />
Run Code Online (Sandbox Code Playgroud)
然后在你的View构造函数中(确保实现IViewFor<Tile1ViewModel>以获得此扩展):
this.BindCommand(ViewModel, x => x.Tile1Command);
this.WhenAnyObservable(x => x.ViewModel.Tile1Command.CanExecuteObservable)
.BindTo(this, x => x.Tile1.Visibility);
Run Code Online (Sandbox Code Playgroud)
您也可以在ViewModel级别解决此问题,尽管这不是我要做的 - 在ViewModel ctor中:
Tile1Command = new ReactiveCommand(/* ... */);
Tile1Command
.Select(x => x ? Visibility.Visible : Visibility.Collapsed)
.ToProperty(this, x => x.Tile1Visibility, out tile1Visibility);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2376 次 |
| 最近记录: |