我正在使用MVVM模式来实现WPF应用程序。我的问题是, 我有一个是和否单选按钮和一个文本框。
例如: 你有车吗:是,否(收音机按钮) 输入型号:______________(文本框)
如果用户选择否,我将禁用它。如果用户选择“是”并将“输入模型”文本框留空,我想显示消息或更改背景(就像AdornerElement的方式一样)。我怎样才能做到这一点。
谢谢你, 重新@@收率
答案 0 :(得分:1)
实际上,您不需要为此特定问题应用MVVM,因为它完全是与UI相关的事情。您可以将IsEnabled属性绑定到yesRadiobutton.IsChecked属性,以便在选择noRasioButton时禁用它。再次,您可以使用BoolToVisibilityConverter并将其绑定到TextBlock以显示消息。具有特定背景的矩形相同
答案 1 :(得分:1)
如果您不顾一切地使用MVVM,我会做的是创建一些自定义类型转换器(http://msdn.microsoft.com/en-us/library/ayybcxe5.aspx)。
因此,在Textblock上,将文本绑定到单选按钮的IsChecked属性,然后使用转换器将该布尔值转换为您要显示的自定义字符串。
对于表单的背景,将Background元素绑定到适当的控件的IsChecked,并使用另一个类型转换器将bool转换为Color。
根据我的理解,这是如何通过MVVM实现的。
答案 2 :(得分:0)
我只会使用触发器实现此功能。当您不需要时,无需使用MVVM使事情复杂化。
答案 3 :(得分:0)
这不是MVVM模式的一部分,使用WPF触发器如下,对于背景颜色使用转换器`
<Window.Resources>
<conv:BackgroundConverter x:Key="backgroundConverter"/>
<Style TargetType="{x:Type TextBox}" x:Key="ModelBoxStyle">
<Setter Property="IsEnabled" Value="True"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=NoOption,Path=IsChecked}" Value="True" >
<Setter Property="IsEnabled" Value="False"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Background="{Binding Text,ElementName=ModelBox,Converter={StaticResource backgroundConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<RadioButton Content="Yes" x:Name="YesOption" Grid.Column="0"/>
<RadioButton Content="No" x:Name="NoOption" Grid.Column="2"/>
<TextBlock Text="Enter Model :" Grid.Row="1" Grid.Column="0"/>
<TextBox x:Name="ModelBox" MinWidth="100" Height="20" Grid.Row="1" Grid.Column="2" Style="{StaticResource ModelBoxStyle}"
HorizontalAlignment="Center" VerticalAlignment="Top"/>
</Grid>
public class BackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string text = value as string;
if (string.IsNullOrEmpty(text))
{
return Brushes.Red;
}
return Brushes.White;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}