wpf 为什么我看不到我的“可见”属性的绑定?

hkmswyz6  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(142)

我试图在XAML中修改CheckBox的可见性。我已经这样做了:
XAML摘录:

<CheckBox Content="RES" 
          IsChecked="{Binding Unit.Reserved}" 
          Name="chk_Reserved" 
          Visibility="{Binding Res_Visible}"
          ToolTip="Gereserveerd">
</CheckBox>

字符串
.但是,在调试时,如果我转到“Live Visual Tree”,我会在属性列表中看到以下内容:


的数据
正如您所看到的,IsChecked属性有一个绑定表达式,但Visible属性没有,尽管这是XAML所期望的。
有没有人知道这是怎么可能的?(Visible属性不是“bindable”,...)

首次评论后编辑:

以下是Res_Visible属性的定义:

public class CassetteLevelViewModel:BaseViewModel
{
    ...        
    public Visibility Res_Visible { get; set; }
    ...


Visibility似乎是System.Windows.Visibility。这是正确的吗?(我以为还有UIElement.Visibility,还是我错了?)
Thanks in advance

7qhs6swi

7qhs6swi1#

我希望我正确理解了这个问题,你用Res_Visible属性做了一个绑定,我怀疑你想改变可见性,但是当你从CassetteLevelViewModel改变它时,它不起作用。
要通知View(Xaml)ViewModel中的属性(CassetteLevelViewModel)的值已更改,您应该在BaseViewModel中使用INotifyPropertyChanged

如果您不使用,下面您可以找到您应该在BaseViewModel中添加的内容。

public class BaseViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) =>
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

字符串
OnPropertyChanged()方法通知View属性值已更改。

如果您已经使用了,您只需要按照下面的示例修改您的属性即可。

private Visibility _res_Visibile;
public Visibility Res_Visibile
    {
        get => _res_Visibile;
        set
        {
            _res_Visibile = value;
            OnPropertyChanged();
        }
    }

a14dhokn

a14dhokn2#

经过大量的实验,我在属性的定义中找到了解决方案:
我变了:

public Visibility Res_Vis {get;set;}

字符串
进入:

public Visibility Res_Vis {get;set;} = Visibility.Hidden;


现在一切都很好。

相关问题