Переменная не обнаружена для привязки свойств видимости в UWP - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть три кнопки, и я хотел бы обусловить их видимость переменной. Но у меня сложилось впечатление, что моя переменная не обнаружена.

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

С точками останова, я вижу, я никогда не go через метод Get. Та же проблема с конвертером.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Большое спасибо, все работает.

Но обновлений нет. Обнаружение моей переменной работает, но ничего не происходит, когда изменяется ее значение.

Я попытался выполнить принудительное обновление:

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}

//...

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

У меня ошибка?

0 голосов
/ 16 апреля 2020

Вы, вероятно, забыли установить DataContext.

Вы можете установить DataContext либо в коде позади, либо в XAML

  1. Код позади

    public class MainPage.xaml
    {
        public MainPage()
        {
            this.DataContext = this;
            InitializeComponent();
        }
    }
    
  2. в XAML

    <MainPage DataContext="{Binding RelativeSource={RelatativeSource Self}}" />
    
...