Привязки в ContentControl не обновляют данные

1

У меня есть код:

<TextBox Width="200" Text="{Binding Value}"></TextBox>

Что работает. Однако "Значение" может быть разных типов. Поэтому, если у меня есть bool, я хочу показать флажок. Я переписал его так, как следует, что работает:

<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 togheter со связями. "Значение" привязано к экземпляру Property

    [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));
            }
        }
    }
Теги:
xaml
data-binding
mvvm-light
contentcontrol

1 ответ

1

Вы должны реализовать интерфейс INotifyPropertyChanged, чтобы отслеживать изменения свойств. Я уверен, что тогда все будет хорошо.

Это работает для меня:

 public partial class MainWindow : Window, INotifyPropertyChanged
{
    private object value;        

    public MainWindow()
    {
        InitializeComponent();
        Loaded += MainWindow_Loaded;
        DataContext = this;
    }

    public object Value
    {
        get { return value; }
        set
        {                
            this.value = value;
            NotifyPropertyChanged("Value");
        }
    }       

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Value = true;            
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
  • 0
    Это работало отлично, когда у меня было только текстовое поле, редактирование текста текстового поля обновляло модель. Однако, когда я попытался сделать это со вторым кодом (ContentControl), он просто не работал.
  • 0
    Не могли бы вы поделиться своим кодом позади? Особенно свойство, определяющее.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню