2014-11-13 3 views
0

나는 코드가 업데이트되지 않습니다. 그러나 "가치"는 다른 유형이 될 수 있습니다. 그래서 내가 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)로이 작업을 시도했지만 작동하지 않습니다.

코드

것은 내가 바인딩을 togheter MVVM 조명을 사용하고 있습니다. "값"은 속성의 인스턴스에 바인딩됩니다.

[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)); 
      } 
     } 
    } 

답변

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)로이 작업을 시도했지만 작동하지 않습니다. – Knarf

+0

코드를 공유 할 수 있습니까? 특히 속성 정의. –

+0

질문에 코드를 추가했습니다. – Knarf