У меня есть код:
<TextBox Width="200" Text="{Binding Value}"></TextBox>
Который работает. Однако «Значение» может быть разных типов. Поэтому, если у меня есть логическое значение, я хочу показать флажок. Я переписал это следующим образом, что вроде работает:
<ContentControl Content="{Binding Value}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type sys:Boolean}">
<CheckBox IsChecked="{Binding Path=.}"></CheckBox>
</DataTemplate>
<DataTemplate DataType="{x:Type sys:Double}">
<TextBox Width="200" Text="{Binding Path=.}"></TextBox>
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
Но теперь свойство не обновляется, как раньше. Я попытался установить Mode=Twoway, но это все равно не работает.
Изменить
Это работало отлично, когда у меня было только текстовое поле, редактирование текста текстового поля обновляло модель. Однако, когда я попытался сделать это со вторым кодом (ContentControl), это просто не сработало.
Код
Я использую Mvvm-light вместе с привязками. «Значение» привязано к экземпляру свойства
[JsonObject]
public class Property<T> : INotifyPropertyChanged
{
[JsonProperty]
public String name;
public Property(String name, T value)
{
this._value = value;
this.name = name;
}
[JsonIgnore]
public T Value {
get { return _value; }
set {
_value = value;
hot = true;
NotifyPropertyChanged("Value");
}
}
[JsonProperty(PropertyName = "value")]
private T _value;
[JsonIgnore]
public String Name { get { return name; } set { name = value; } }
[JsonProperty]
public bool hot = false;
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}