我是 WPF 和 MVVM 的新手,我正在寻找正确方向的指针。
我想实现类似于 Microsoft Word 中的“打印 n 页、当前页或选择”的东西。
在我的示例中,我有单选按钮可以在radio1或radio2之间切换,但也
- 默认为视图模型中的任何 TimeType
TimeType == Type1
=> radio1 被选中,text1 = ""TimeType == Type2
=> radio2 被选中,text1 = ViewModel.Time
- 如果用户选择 radio1我想清除text1。
- 如果在text1中输入值,我希望单选按钮切换到radio2并相应更新视图模型
我已经看到并尝试了各种转换器示例,但我无法弄清楚如何使对行为的各种影响能够很好地一起发挥作用。
我有一种感觉,我应该在视图模型中实现一些东西来执行逻辑,但我看不到要绑定什么。
XAML
<Grid.Resources>
<local:EnumToBooleanConverter x:Key="e2b" />
</Grid.Resources>
<RadioButton Name="radio1" GroupName="g1" Content="Radio 1"
IsChecked="{Binding Path=TimeType, Converter={StaticResource e2b}, ConverterParameter={x:Static vm:TimeType.Type1}}"
/>
<RadioButton Name="radio2" GroupName="g1">
<TextBox Name="text1"
Text="{Binding Path=ExplicitTime, Mode=TwoWay}">
</TextBox>
</RadioButton>
查看模型
// UPDATE: added INotifyPropertyChanged as per my actual code
class MagicTimeViewModel :INotifyPropertyChanged {
public enum TimeType{Type1, Type2}
TimeType _type; int _time;
public TimeType TimeType{
get{_return _type;}
set {_type = value; Notify("TimeType");}
}
public int Time {
get{_return _time;}
set {_time = value; Notify("Time");}
}
void Notify(string name)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public event PropertyChangedEventHandler PropertyChanged;
}