2014-07-10 4 views
1

텍스트 블록을 내 변수 slctItem에 바인딩하려고합니다. 그러나 필요한 데이터가 포함되어 있음을 알 수 있습니다. 그러나 창에는 예상 한 데이터가 표시되지 않습니다. 내 제어를위한 코드는 다음과 같습니다. 이 컨트롤은 컨트롤의 값을 표시하는 팝업 창에 의해 사용됩니다.INotifyPropertyChanged의 PropertyChanged 멤버가 항상 null입니다.

코드를 걸 으면 해당 핸들러가 OnPropertyChanged() 메서드에서 매번 null을 반환하는 것을 볼 수 있습니다. 왜? 나는 여기서 뭔가 잘못하고있을 것임에 틀림 없다. 다시 slcItem에는 내가 사용하고자하는 데이터가 포함되어 있습니다. OnPropertyChanged() 메서드는 처리기에 null이 포함되어 있으면 발생시킵니다.

public partial class MetaData : UserControl, INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    private string _slctItem; 

    public MetaData() 
    { 
     InitializeComponent(); 
    } 

    public string slctItem 
    { 
     get 
     { 
      return _slctItem; 
     } 
     set 
     { 
      _slctItem = value; 
      OnPropertyChanged("slctItem"); 
     } 
    } 

    private void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    internal void Refresh() 
    { 
     try 
     { 
      // If DataContext is Null or a detached DataRow, disable the view 
      if (DataContext != null && (DataContext is DataRow && ((DataRow)DataContext).RowState != System.Data.DataRowState.Detached)) 
      { 

       if (DataContext is "Something Here") 
       { 
        slctItem = (("Something Here")this.DataContext).NAME; 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      throw new Exception("MetaData -> Refresh(): " + e.Message); 
     } 
    } 

다음은 내가 제어 할 수있는 XAML 코드입니다.

public MetaData() 
{ 
    InitializeComponent(); 
    this.DataContext = this; 
} 

이이 적합한 속성을 찾을 바인딩 수 있습니다 : 당신은 자신에게 DataContext을 설정해야

<TextBox Grid.Column="2" Grid.Row="0" Text="{Binding Path=slctItem, Mode=OneWay, Converter={StaticResource myFirstCharToUpperConverter}}" Width="150" Height="25" HorizontalAlignment="Left" /> 
+0

'DataContext' 속성을 설정하지 않은 것처럼 보입니다. 그 코드가 누락되었거나 그것을 작성하는 것을 잊었습니까? 이벤트 처리기는 설정하지 않고 설정합니다. – BradleyDotNET

답변

1

slctItem에 저는 여기에 결합하는 것을 시도하고있다. 현재 런타임에서 출력 창에서 Debug Output을 보면 데이터 컨텍스트가 설정되어 있지 않기 때문에 바인딩 오류가 표시되어야합니다.

+0

그래서 XAML쪽에 DataContext를 설정했기 때문에이 작업을 수행 할 수 없습니다. 솔루션을 구현하면 CREATED_BY가 더 이상 표시되지 않습니다. {TextBox Grid.Column = "2"Grid.Row = "1"DataContext = "{Binding}"텍스트 = "{바인딩 CREATED_BY, 변환기 = {StaticResource myFirstCharToUpperConverter}}"너비 = "150"높이 = "25 "HorizontalAlignment ="Left "/>' 그러나 귀하의 DataContext 말이 있습니다. 난 그냥 slctItem에 대한 XAML 측면에 설정 해야할지 모르겠다? – GET1NE

+0

@ GET1NE RelativeSource 바인딩을 사용하여 자체에 바인딩 할 수 있습니다. –

+0

이렇게 작동했습니다. 도와 주셔서 감사합니다! {TextBox Grid.Column = "2"Grid.Row = "0"Text = "{바인딩 관계형 소스 = {RelativeSource AncestorType = {x : 유형 UserControl}}, 경로 = slctItem, 모드 = OneWay, 변환기 = {StaticResource myFirstCharToUpperConverter}} "Width ="150 "Height ="25 "HorizontalAlignment ="Left "/> – GET1NE

관련 문제