我正在使用MVVM模式實現WPF應用程序。我的問題是, 我有一個是和沒有單選按鈕和一個文本框。MVVM WPF問題
例如: 你擁有自己的汽車:是,否(單選按鈕) 輸入產品型號:______________(文本框)
如果用戶選擇不,我將其禁用。如果用戶選擇「是」並將「輸入模型」文本框留空,我想顯示一條消息或更改背景(就像AdornerElement所做的那樣)。我怎樣才能做到這一點。
謝謝 Re @@ y。
我正在使用MVVM模式實現WPF應用程序。我的問題是, 我有一個是和沒有單選按鈕和一個文本框。MVVM WPF問題
例如: 你擁有自己的汽車:是,否(單選按鈕) 輸入產品型號:______________(文本框)
如果用戶選擇不,我將其禁用。如果用戶選擇「是」並將「輸入模型」文本框留空,我想顯示一條消息或更改背景(就像AdornerElement所做的那樣)。我怎樣才能做到這一點。
謝謝 Re @@ y。
如果您不顧一切地使用MVVM,將會創建一些自定義類型轉換器(http://msdn.microsoft.com/en-us/library/ayybcxe5.aspx)。
因此,在文本塊上,將文本綁定到單選按鈕的IsChecked屬性,然後使用轉換器將該布爾轉換爲您要顯示的自定義字符串。
對於窗體的背景,將Background元素綁定到相應的控件的IsChecked並使用另一個類型轉換器將bool轉換爲Color。
這就是我的理解,如何通過MVVM來實現。
實際上,您不需要將MVVM應用於此特定問題,因爲它完全是與UI相關的事情。您可以將IsEnabled屬性綁定到yesRadiobutton.IsChecked屬性,使其在您選擇noRasioButton時禁用。再次,您可以使用BoolToVisibilityConverter並將其綁定到TextBlock以顯示消息。相同的具有特定背景的矩形
你能給我一個代碼示例? – YukiSakura 2015-06-10 08:50:27
我只會使用觸發器來實現這個。當你不需要時,不需要通過使用MVVM來使事情複雜化。
這不是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();
}
}
這也是我上面提出的,它並不是真的MVVM,它純粹是一個XAML工作,所以不需要C#代碼或ViewModel來執行我們的解決方案。 – 2009-11-12 02:23:56
感謝您的回覆..我會檢查它... – Manohar 2009-11-12 04:24:10
Jobi Joy:你有任何你的代碼的例子嗎?我是MVVM中的新成員,需要學習很多示例。 – YukiSakura 2015-06-10 08:42:24