bas*_*bas 2 c# visibility viewmodel mvvm-light uwp
我对一个(我认为)简单的实现感到困惑;根据与视图模型的绑定使 UI 元素可见。我使用 mvvmlight 框架。当绑定(布尔值)设置为true可见性时,绑定不会对更改做出反应。
XAML:
<Button
Command="{Binding NavigationCommand}" CommandParameter="{StaticResource Back}"
Visibility="{x:Bind (Visibility) ViewModel.ShowNavigationButtons}">
<Image Source="../../../Resources/NavigateBack.PNG"/>
</Button>
Run Code Online (Sandbox Code Playgroud)
后面的代码:
public sealed partial class MainPage
{
public MainPage()
{
InitializeComponent();
DataContext = new MainViewModel();
}
public MainViewModel ViewModel => DataContext as MainViewModel;
}
Run Code Online (Sandbox Code Playgroud)
视图模型:
public class MainViewModel : ViewModelBase
{
private bool _showNavigationButtons;
public RelayCommand BrakingCommand { get; }
public bool ShowNavigationButtons
{
get => _showNavigationButtons;
set { Set(() => ShowNavigationButtons, ref _showNavigationButtons, value); }
}
public MainViewModel()
{
BrakingCommand = new RelayCommand(() =>
{
ShowNavigationButtons = true;
NavigationCommand.RaiseCanExecuteChanged();
});
}
}
Run Code Online (Sandbox Code Playgroud)
我还尝试绑定“WPF方式”:
Visibility="{Binding ShowNavigationButtons, Converter{StaticResource BoolToVisibilityConverter}">
Run Code Online (Sandbox Code Playgroud)
但这会导致完全相同的问题;视图不会对更改的属性做出反应。
非常感谢帮助,
为了……的爱
问题是绑定的默认模式是onetime. 花一个小时来弄清楚。当我如下声明绑定时,它按预期工作......
Visibility="{x:Bind (Visibility) ViewModel.ShowNavigationButtons, Mode=OneWay}">
Run Code Online (Sandbox Code Playgroud)
我希望这能帮助有一天正在拔头发的人......