申し訳ありませんが、最初はこの質問を完全に間違って読みました。
あなたがこのようなモデルを持っていると仮定します
class FakeModel
{
public int? IntegerValue { get; set; }
public string StringValue { get; set; }
}
次に、これを解決する最良の方法は、次のようなViewModelを実装することです。
class FakeViewModel : INotifyPropertyChanged
{
private FakeModel _fakeModel;
public FakeViewModel(FakeModel model)
{
_fakeModel = model;
}
public bool IntChecked
{
get { return _fakeModel.IntegerValue.HasValue; }
set
{
if (value)
IntegerValue = -1; //for example
else
IntegerValue = null; //to reset
OnPropertyChanged("IntChecked");
}
}
public int IntegerValue
{
get { return _fakeModel.IntegerValue.Value; }
set { _fakeModel.IntegerValue.Value = value;
OnPropertyChanged("IntegerValue");
}
}
public bool StringChecked
{
get { return _fakeModel.StringValue.HasValue; }
set
{
if (value)
StringValue = -1; //for example
else
StringValue = null; //to reset
OnPropertyChanged("StringChecked");
}
}
public int StringValue
{
get { return _fakeModel.StringValue.Value; }
set
{
_fakeModel.StringValue.Value = value;
OnPropertyChanged("StringValue");
}
}
protected void OnPropertyChanged(string callerName)
{
var temp = PropertyChanged;
if (temp != null)
temp(this, new PropertyChangedEventArgs(callerName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
これには、INotifyPropertyChangedの基本的な実装が含まれます。これは、Caliburn.MicroMMVMLiteやReactiveUIなどの基本クラスまたはmvvmライブラリから交互に継承できます。
ビューモデルまたはMVVMの詳細については、MDSNのMVVMに関するJoshSmithを確認してください。