C# 无法使用viewmodel在WPF的窗口中使控件可见和隐藏?
我实现了一个文本框,当复选框未选中时,文本框必须可见,反之亦然。 以下是我的看法:C# 无法使用viewmodel在WPF的窗口中使控件可见和隐藏?,c#,wpf,mvvm,viewmodel,visibility,C#,Wpf,Mvvm,Viewmodel,Visibility,我实现了一个文本框,当复选框未选中时,文本框必须可见,反之亦然。 以下是我的看法: <TextBox Visibility="{Binding VisiMaxTime}" Height="23" HorizontalAlignment="Left" Margin="165,36,0,0" Text="{Binding Path=MaxTime,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" VerticalAlignment="Top"
<TextBox Visibility="{Binding VisiMaxTime}" Height="23" HorizontalAlignment="Left" Margin="165,36,0,0" Text="{Binding Path=MaxTime,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" VerticalAlignment="Top" Width="75" />
<CheckBox IsChecked="{Binding MaxTimeIsChecked}" Content="Geen" FontWeight="Bold" Height="16" HorizontalAlignment="Left" Margin="104,39,0,0" Name="checkBox1" VerticalAlignment="Top" />
所以我认为这很好,这在用户控件中工作,但现在我在窗口中工作。如果我在可见性的setters中设置了一个断点,它可以正常工作,但是文本框就是不可见?有人知道我做错了什么吗
谢谢我想您需要双向绑定:
<CheckBox IsChecked="{Binding MaxTimeIsChecked, Mode=TwoWay}" … />
您的文本框的数据上下文是否正确
我注意到您的
MaxTime
属性在ViewModel中被定义为设置为examicationtime.MaxTime
,而您的TextBox.Text绑定被绑定到MaxTime
。文本框的数据上下文是您的视图模型还是您的检查时间?如果文本框的可见性取决于复选框,为什么不直接绑定到该复选框
<TextBox Visibility="{Binding ElementName=checkBox1,Path=IsChecked,Converter=BooleanToVisibilityConverter}" />
您需要使用BooleanToVisibilityConverter将Bool转换为Visiblity问题在于VisiMaxTime属性不会更新MaxTimeIsChecked属性
private Visibility visiMaxTime;
public Visibility VisiMaxTime
{
get { return visiMaxTime; }
set
{
if (visiMaxTime == value)
return;
visiMaxTime = value;
OnPropertyChanged("VisiMaxTime");
MaxTimeIsChecked = VisiMaxTime == Visibility.Visible;
}
}
也就是说,您可以绑定到MaxTimeIsChecked属性并使用BooleanToVisibilityConverter您是否正在提升
属性更改
?是的,我使用visibility属性对其进行了编辑。如果代码在用户控件中工作,它应该在窗口中工作,而不做任何更改。我看不出密码有什么问题。您是否将实际代码复制并粘贴到此问题中?尝试在OnPropertyChanged方法中设置断点,以确保按预期引发属性更改。是的,文本框绑定到viewmodel中的Maxtime属性,我在那里设置了检查对象的Maxtime。@Ruben您在问题中发布的代码工作正常。产生问题的是实际代码吗?如果我把它放进去,他会给出一个错误:“Set property”System.Windows.Data.Binding.Converter“抛出了一个异常。”行号“13”和行位置“260”。我认为它与转换器有关:我在窗口中有这样的道具:xmlns:converters=“clr namespace:toetsbeertweedezit.converters”我做错了什么?
private Visibility visiMaxTime;
public Visibility VisiMaxTime
{
get { return visiMaxTime; }
set
{
if (visiMaxTime == value)
return;
visiMaxTime = value;
OnPropertyChanged("VisiMaxTime");
MaxTimeIsChecked = VisiMaxTime == Visibility.Visible;
}
}