UWP可见性绑定不起作用(mvvmlight)

时间:2018-08-17 20:41:01

标签: c# uwp viewmodel mvvm-light visibility

我被一个(我认为)简单的实现所迷惑;根据对视图模型的绑定,使UI元素可见。我使用mvvmlight框架。当绑定(布尔值)设置为true时,可见性绑定不会对更改做出反应。

XAML:

<Button 
    Command="{Binding NavigationCommand}" CommandParameter="{StaticResource Back}"
    Visibility="{x:Bind (Visibility) ViewModel.ShowNavigationButtons}">
    <Image Source="../../../Resources/NavigateBack.PNG"/>
</Button>

后面的代码:

public sealed partial class MainPage
{
    public MainPage()
    {
        InitializeComponent();

        DataContext = new MainViewModel();
    }

    public MainViewModel ViewModel => DataContext as MainViewModel;
}

ViewModel:

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();
        });
     }
}

我还试图绑定“ WPF方式”:

Visibility="{Binding ShowNavigationButtons, Converter{StaticResource BoolToVisibilityConverter}">

但这会导致完全相同的问题;该视图对更改后的属性没有反应。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:2)

为了...的爱

问题是绑定的默认模式是onetime。花一个疯狂的时间来解决这个问题。当我按如下方式声明绑定时,它将按预期工作...

Visibility="{x:Bind (Visibility) ViewModel.ShowNavigationButtons, Mode=OneWay}">

我希望这有一天能帮助别人拔头发...