【问题标题】:Variable not detected to binding visibility properties in UWP在 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 方法。 转换器也有同样的问题。

有什么想法吗?

【问题讨论】:

    标签: c# xaml binding visibility converters


    【解决方案1】:

    您可能忘记设置DataContext

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

    1. 代码隐藏

      public class MainPage.xaml
      {
          public MainPage()
          {
              this.DataContext = this;
              InitializeComponent();
          }
      }
      
    2. 在 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");
      

      我有错误吗?

      【讨论】:

        猜你喜欢
        • 2010-09-27
        • 1970-01-01
        • 2014-08-20
        • 2017-11-08
        • 2010-12-01
        • 2012-05-23
        • 1970-01-01
        • 2012-05-15
        • 1970-01-01
        相关资源
        最近更新 更多