2016-07-15 2 views
-4

'C'WPF 프로젝트의 ComboBox에 'Name'문자열과 'Double'Weight '속성이있는'Envelope '항목 목록에 바인딩 된 TextBlock이 있습니다. , 나는 TextBlock에 표시하고 싶습니다.ComboBox의 TextBlock에 바인딩 된 문자열이 표시되지 않습니다.

내 프로그램을 실행하면 ComboBox에 아무 텍스트도 표시되지 않습니다. 제대로 세 개의 레이블이없는 항목이 있으며 ComboBox의 ItemsSource 또는 SelectedItem을 보면 적절한 값이 표시되고 ComboBox의 SelectedItem과 상호 작용하는 다른 코드가 제대로 작동합니다. 유일하게 작동하지 않는 것은 TextBlock에 텍스트가 없다는 것입니다. "{Binding Name}""au ghdfjlnvgmumar"으로 바꾸면 ComboBox에 잘못된 문자가 표시되어 바인딩에 문제가있는 것입니다. 무엇이 문제이며 어떻게 해결할 수 있습니까?

관련 코드 :

는 XAML :

<ComboBox Name="EnvelopeList" HorizontalAlignment="Center" Width="200" > 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding Name}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

C 번호 :

//main window code 
public MainWindow() 
{ 
    InitializeComponent(); 

    envelopes = new List<Envelope>(); 
    envelopes.Add(new Envelope("TEST", 0)); 
    envelopes.Add(new Envelope("HI", 10)); 

    EnvelopeList.ItemsSource = envelopes; 
} 

//Envelope class 
class Envelope 
{ 
    public string Name; 
    public double Weight; 

    public Envelope() 
    { 
     Name = "[None]"; 
     Weight = 0; 
    } 
    public Envelope(string n, double w) 
    { 
     Name = n; 
     Weight = w; 
    } 

    public override string ToString() 
    { 
     return Name; 
    } 
} 

답변

-1

Name필드, 당신은 단지 properties에 바인딩 할 수 있습니다.

+0

감사합니다. 가능한 한 수락 할 것입니다. –

2

DataBinding 인 경우 속성에만 바인딩 할 수 있습니다. 또한 PropertyChangedEvent으로 속성을 업데이트해야합니다. 그렇지 않으면 초기 바인딩 후에 속성을 변경하면 UI가 업데이트되지 않습니다.

당신은 마지막으로, 당신이 직접 ItemsSource을 설정하는 것을 알 재산 변경 및 속성

public class Envelope: ModelBase 
    { 
     private string _name; 

     public string Name 
     { 
      get { return _name; } 
      set { _name= value; OnPropertyChanged("Name"); } 
     } 

    } 

    public class ModelBase : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 

     public void OnPropertyChanged(string propName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 

      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(propName)); 
      } 
     } 
    } 

에 사용해야합니다. 대신보기의 DataContext 속성을 설정하고 다음을 바인딩하려고합니다. ItemsSource

여기에 올바르게 수행하는 방법을 가르쳐 줄 MSDN article on DataBinding입니다.

관련 문제