私は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;
}