2009-11-12 81 views
2

我正在使用MVVM模式实现WPF应用程序。我的问题是, 我有一个是和没有单选按钮和一个文本框。MVVM WPF问题

例如: 你拥有自己的汽车:是,否(单选按钮) 输入产品型号:______________(文本框)

如果用户选择不,我将其禁用。如果用户选择“是”并将“输入模型”文本框留空,我想显示一条消息或更改背景(就像AdornerElement所做的那样)。我怎样才能做到这一点。

谢谢 Re @@ y。

回答

1

如果您不顾一切地使用MVVM,将会创建一些自定义类型转换器(http://msdn.microsoft.com/en-us/library/ayybcxe5.aspx)。

因此,在文本块上,将文本绑定到单选按钮的IsChecked属性,然后使用转换器将该布尔转换为您要显示的自定义字符串。

对于窗体的背景,将Background元素绑定到相应的控件的IsChecked并使用另一个类型转换器将bool转换为Color。

这就是我的理解,如何通过MVVM来实现。

+0

这也是我上面提出的,它并不是真的MVVM,它纯粹是一个XAML工作,所以不需要C#代码或ViewModel来执行我们的解决方案。 – 2009-11-12 02:23:56

+0

感谢您的回复..我会检查它... – Manohar 2009-11-12 04:24:10

+0

Jobi Joy:你有任何你的代码的例子吗?我是MVVM中的新成员,需要学习很多示例。 – YukiSakura 2015-06-10 08:42:24

1

实际上,您不需要将MVVM应用于此特定问题,因为它完全是与UI相关的事情。您可以将IsEnabled属性绑定到yesRadiobutton.IsChecked属性,使其在您选择noRasioButton时禁用。再次,您可以使用BoolToVisibilityConverter并将其绑定到TextBlock以显示消息。相同的具有特定背景的矩形

+0

你能给我一个代码示例? – YukiSakura 2015-06-10 08:50:27

0

我只会使用触发器来实现这个。当你不需要时,不需要通过使用MVVM来使事情复杂化。

0

这不是MVVM模式的一部分,使用WPF触发如下,背景色用converter`

<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(); 
    } 
}