在 UWP 中未检测到绑定可见性属性的变量

Posted

技术标签:

【中文标题】在 UWP 中未检测到绑定可见性属性的变量【英文标题】:Variable not detected to binding visibility properties in UWP 【发布时间】:2020-07-29 10:41:44 【问题描述】:

我有三个按钮,我想用一个变量来调节它们的可见性。 但我的印象是我的变量没有被检测到。

MainPage.xaml:

<Button
    Margin="0,0,0,50"
    Name="startButton"
    Height="50"
    Width="250"
    Click="OnStartClick"
    ClickMode="Press"
    Visibility="Binding StartVisibility, Converter=StaticResource BoolToVisibilityConverter">
    Start
</Button>
<Button
    Margin="0,0,0,50"
    Name="validButton"
    Height="50"
    Width="250"
    Click="OnValidClick"
    ClickMode="Press"
    Visibility="Binding ValidVisibility, Converter=StaticResource BoolToVisibilityConverter">
    Valid
</Button>
<Button 
    Margin="0,50,0,0"
    Name="stopButton"
    Height="50"
    Width="250"
    Click="OnStopClick"
    ClickMode="Press"
    Visibility="Binding StopVisibility, Converter=StaticResource BoolToVisibilityConverter, Mode=OneWay">
    Cancel
</Button>

MainPage.xaml.cs:

private IMapService _mapService;
private bool drawing = false;

public bool StopVisibility

    get
    
         return drawing;
    


public bool StartVisibility

    get
    
         return !drawing;
    


public bool ValidVisibility

    get
    
         return _mapService.SketchEditorCanExecute();
    

IMapService.cs:

bool SketchEditorCanExecute();

BoolToVisibilityConverter.cs:

public object Convert(object value,
                      Type targetType,
                      object parameter,
                      String language)

    Boolean val = false;
    if (value is Boolean)
    
        val = (Boolean)value;
    
    return val
        ? Visibility.Visible
        : Visibility.Collapsed;

有了断点,我发现我从来没有通过 Get 方法。 转换器也有同样的问题。

有什么想法吗?

【问题讨论】:

【参考方案1】:

您可能忘记设置DataContext

您可以在代码隐藏或XAML 中设置DataContext

    代码隐藏

    public class MainPage.xaml
    
        public MainPage()
        
            this.DataContext = this;
            InitializeComponent();
        
    
    

    在 XAML 中

    <MainPage DataContext="Binding RelativeSource=RelatativeSource Self" />
    

【讨论】:

【参考方案2】:

非常感谢,它有效。

但是没有更新。我的变量的检测有效,但当它的值发生变化时没有任何反应。

我试过这个来强制更新:

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string name = null)

     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));


//...

OnPropertyChanged("StopVisibility");
OnPropertyChanged("StartVisibility");
OnPropertyChanged("ValidVisibility");

我有错误吗?

【讨论】:

以上是关于在 UWP 中未检测到绑定可见性属性的变量的主要内容,如果未能解决你的问题,请参考以下文章

如何将 StackPane 的可见性绑定到属性?

无法将XAML按钮可见性与C#视图模型专用可见性变量绑定

绑定到可见性属性时动画不正确(奇数)

WPF - 将 UserControl 可见性绑定到属性

如何使用 WPF 中的代码绑定 DataGridTextColumn 的可见性属性?

使用 Visual States 切换 AppBarButton 可见性时出现“未检测到已安装的组件”错误