我有一个类(不是ViewModel),它有一个确定按钮可见性的属性。我已将该类包含在UserControl的资源
中<UserControl.Resources>
<helpers:DialogLayoutConfigInfo x:Key="DialogConfigInfo"/>
<BooleanToVisibilityConverter x:Key="BoolToVis" />
</UserControl.Resources>
我将按钮的可见性绑定到&#34; DialogLayoutConfigInfo&#34;中的属性。类。
private bool isButtonVisible;
public bool IsButtonVisible
{
get { return isButtonVisible; }
set { isButtonVisible= value; OnPropertyChanged("IsButtonVisible"); }
}
<Button Visibility="{Binding Source={StaticResource DialogConfigInfo},
Path=IsButtonVisible, Converter={StaticResource BoolToVis}}">
如果我更新属性&#34; IsButtonVisible&#34;在&#34; DialogLayoutConfigInfo&#34;的构造函数中;类,可见性更新。但是当调用构造函数时,我没有XML文件(用于获取设置属性的信息)。所以我稍后调用一个更新属性的函数。如果我在功能中设置可见性,为什么不能更新可见性?
设置属性的函数从我后面的View代码中调用。
答案 0 :(得分:0)
我认为你应该像这样更新你的DialogLayoutConfigInfo类
public class DialogLayoutConfigInfo : INotifyPropertyChanged
{
/// <summary>
/// Property Change Event
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Property Change Method
/// </summary>
/// <param name="prop">Property Name</param>
internal void RaisePropertyChanged(string prop)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
public static DialogLayoutConfigInfo instance;
public DialogLayoutConfigInfo()
{
if (instance == null)
{
instance = this;
}
IsButtonVisible = Visibility.Visible;
}
private Visibility isButtonVisible;
public Visibility IsButtonVisible
{
get
{
return isButtonVisible;
}
set
{
isButtonVisible = value;
this.RaisePropertyChanged("IsButtonVisible");
}
}
}
后面的代码应该像
DialogLayoutConfigInfo.instance.IsButtonVisible = Visibility.Collapsed;
答案 1 :(得分:-2)
基本上它是由.Net BooleanToVisibilityConverter
中的内置类实现的:
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="booleanVisibilityConverter"/>
</UserControl.Resources>
示例:强>
XAML:
<Button Content="Hello, I am the button" Visibility="{Binding ShowButton, Converter={StaticResource booleanVisibilityConverter}}"/>
你的班级:
private bool _showButton = false;
public bool ShowButton
{
get { return _showButton; }
set
{
if (value != _showButton)
{
_showButton = value;
OnPropertyChanged("ShowButton");
}
}
}
如果您想更改代码中Visibility
的{{1}},可以通过ViewModel中的此代码进行设置:
Button
您的情况:
没有必要实施//Show error Message
IsButtonVisible = false;
,因为IValueConverter
在{strong> .Net <内置BooleanToVisibilityConverter Class
时没有Visibility
(请参阅上面的示例) / strong>即可。你的情况:
IValueConverter
XAML:
private bool isButtonVisible;
public bool IsButtonVisible
{
get { return isButtonVisible; }
set { isButtonVisible= value; OnPropertyChanged("IsButtonVisible"); }
}