2009-11-12 119 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(); 
    } 
}