khaled_basher Ответов: 1

Видимость Wpf netframeworkcore 3.1 MVVM


Я пытаюсь скрыть объект через свойства другого объекта, я не знаю, в чем проблема, но это не работает

Код привязки
<StackPanel Orientation="Horizontal">
    <Grid Margin="25,0,0,0" HorizontalAlignment="Center">
        <TextBlock

            Text="اسم المستخدم" 

            FontWeight="Light"

            FontSize="18"

            Foreground="White"

            Background="Transparent"

            Width="230"

            Opacity="0.5"

            Height="28"

            Visibility="{Binding Path=VisbTbU , Mode=TwoWay}"/>
        <TextBox 

            FontFamily="Helvetica"

            FontWeight="Light"

            FontSize="18"

            HorizontalAlignment="Center"

            Foreground="White"

            Background="Transparent"

            BorderThickness="0"

            Width="235"

            HorizontalContentAlignment="Left"

            Opacity="0.5"

            Height="25"

            Text="{Binding UserLog}"

        />
    </Grid>
    <iconPacks:PackIconMaterial 

        Kind="Account"

        VerticalAlignment="Center"

        HorizontalAlignment="Center"

        Foreground="White"

    />
</StackPanel>

код viewmodel
public VmWinLogin()
{
    VisbTbp = Visibility.Visible;
    VisbTbp = Visibility.Visible;
    UserLog = "";
    UserPass = "";
}

private Visibility _VisbTbU ;

public Visibility VisbTbU
{
    get => _VisbTbU;
    set
    {
        _VisbTbU = value;
       // OnPropertyChanging();
       OnPropertyChanging();
    }
}


private string _UserLog ;

public string UserLog
{
    get => _UserLog .Trim();
    set
    {
        _UserLog = value .Trim();
        OnPropertyChanging();
        if (_UserLog == "")
        {
            VisbTbU = Visibility.Visible;
        }
        else
        {
            VisbTbU = Visibility.Hidden;
        }
    }
}

код базовой модели
public event PropertyChangingEventHandler PropertyChanging;

public event PropertyChangedEventHandler PropertyChanged;

[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanging([CallerMemberName] string propertyName = null)
{
    PropertyChanging?.Invoke(this, new PropertyChangingEventArgs(propertyName));
}


Что я уже пробовал:

Я попытался проследить за реализацией, чтобы убедиться, что значение свойства не изменилось, и обнаружил, что оно изменилось, но на объект это никак не повлияло.

1 Ответов

Рейтинг:
0

phil.o

Технически, OnPropertyChanging может быть в конце концов вызван до соответствующее свойство изменяется. Как только свойство было изменено, то OnPropertyChanged должен быть вызван. Ты только звонишь OnPropertyChanging после модификации, так что есть большой шанс, что система никогда не поймает PropertyChanged событие.


khaled_basher

nvoke PropertyChanged это тоже не сработало

публичное мероприятие PropertyChangedEventHandler PropertyChanged;

охраняемых недействительными on свойство changed([callermembername не используется] строку имя_свойства = значение null) { VerifyPropertyName(имясвойства); PropertyChanged, как?.Invoke(this,new PropertyChangedEventArgs(propertyName)); }

phil.o

Вы действительно изменили код в сеттере VisbTbU?