提问人:Dominique 提问时间:11/16/2023 最后编辑:Dominique 更新时间:11/16/2023 访问量:58
为什么我看不到“Visible”属性的绑定?
Why don't I see the binding of my "Visible" property?
问:
我正在尝试修改 XAML 中 a 的可见性。我这样做如下:CheckBox
XAML 摘录:
<CheckBox Content="RES"
IsChecked="{Binding Unit.Reserved}"
Name="chk_Reserved"
Visibility="{Binding Res_Visible}"
ToolTip="Gereserveerd">
</CheckBox>
...但是,在调试时,如果我转到“实时可视化树”,我会在属性列表中看到以下内容:
如您所见,属性有一个绑定表达式,但该属性没有绑定表达式,尽管这是 XAML 所期望的。IsChecked
Visible
有谁知道这是怎么回事?(属性不是“可绑定的”,...Visible
在第一次评论后编辑: 特此介绍属性的定义:Res_Visible
public class CassetteLevelViewModel:BaseViewModel
{
...
public Visibility Res_Visible { get; set; }
...
似乎是一个.这是正确的吗?(我以为还有一个,还是我错了?Visibility
System.Windows.Visibility
UIElement.Visibility
提前致谢
答:
1赞
i3070-inline
11/16/2023
#1
我希望我正确地理解了这个问题,您与该属性进行了绑定,我怀疑您想更改可见性,但是当您从中更改它时,它不起作用。Res_Visible
CassetteLevelViewModel
要通知 (Xaml) 在您的案例中为 () 的属性已更改值,您应该在 .View
ViewModel
CassetteLevelViewModel
INotifyPropertyChanged
BaseViewModel
如果您不使用 ,您可以在下面找到您应该添加的内容。BaseViewModel
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
该方法通知 View 属性值已更改。OnPropertyChanged()
如果已使用,则只需修改属性,如下例所示。
private Visibility _res_Visibile;
public Visibility Res_Visibile
{
get => _res_Visibile;
set
{
_res_Visibile = value;
OnPropertyChanged();
}
}
评论
0赞
Dominique
11/16/2023
谢谢。这看起来是一个很好的方法,但与此同时,我已经找到了解决方案。我在回答中提到了它。
0赞
i3070-inline
11/16/2023
我以为你知道枚举的默认值是.Visibility
Visibility.Visible
0赞
Dominique
11/16/2023
不,对不起,我不知道。
-1赞
Dominique
11/16/2023
#2
经过相当多的实验,我在属性的定义中找到了解决方案: 我更改了:
public Visibility Res_Vis {get;set;}
到:
public Visibility Res_Vis {get;set;} = Visibility.Hidden;
现在一切正常。
评论
Visible
绝对是可绑定的。它真的对你有用吗?是否在输出中看到任何绑定错误?你能提供一个最小的可重复的例子吗?(这里缺少大量的上下文。请不仅在此处提供更多背景信息,而且在以后的问题中提供更多信息。Res_Visible