我是WPF和MVVM的新手,我正在寻找正确方向的指针。
我想在Microsoft Word中实现类似于“打印n页,当前页面或选择”的内容。
在我的示例中,我有无线电按钮可在 radio1 或 radio2 之间切换,但
TimeType == Type1
=>选择了radio1,text1 =“”TimeType == Type2
=>选择了radio2,text1 = ViewModel.Time 我已经看过并尝试了各种转换器的例子,但是我无法弄清楚如何在行为中获得各种影响以便很好地协同工作。
我有一种感觉,我应该在视图模型中实现一些东西来做逻辑,但我看不到要绑定的内容。
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;
}
答案 0 :(得分:0)
您需要在INotifyPropertyChanged
ViewModel
答案 1 :(得分:0)
通常做这样的事情我使用ListBox
(因为你想跟踪一个选定的项目,一次只能选择一个项目),并覆盖样式显示为{{1} }
RadioButtons
<Style x:Key="RadioButtonListBoxStyle" TargetType="{x:Type ListBox}">
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" />
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}" >
<Setter Property="Margin" Value="2, 2, 2, 0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border Background="Transparent">
<RadioButton IsHitTestVisible="False" Focusable="false"
Content="{TemplateBinding ContentPresenter.Content}"
IsChecked="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent},Mode=TwoWay}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
存储ViewModel
和SelectedIndex
属性,当一个属性发生更改时,它还会更新任何相关属性。
例如,当TimeText
更改为0时,请清除SelectedIndex
。 TimeText
更改后,请将TimeText
设置为1
以下是XAML的一个示例:
SelectedIndex