2013-06-23 4 views
0

내 프로젝트 ViewModel 요소를 찾을 수 없습니다. 내 WPF Usercontrol 내 ViewModel 구현하는 중이 야. 그러나 바인딩이 제대로 작동하지 않으며 데이터가없는 것 같습니다. 나는 상호 작용할 ViewModel을 만들고, 일반적인 문자열 배열을 넣고, 다른 여러 비트의 데이터를 만들기 위해 노력하고있다.ViewModel 데이터를 찾을 수 없습니다.

MainWindow.xaml - (UserControl을 선언)

<panels:FilterLister Grid.Column="0" x:Name="filter1FilterLister" /> 

MainWindows.cs - (생성자 내에서

filter1FilterLister.Initialise(typeof(Genre)); 

FilterListViewModel.cs

public class FilterListViewModel 
{ 
    MyEntities context = new MyEntities(); 
    ObservableCollection<string> entries = new ObservableCollection<string>(); 

    public Type SelectedType; 
    private string p_TypeName; 
    public string TypeName 
    { 
     get { return p_TypeName; } 
     set { 
      //p_TypeName = value; 
      p_TypeName = SelectedType.Name.ToString(); 
     } 
    } 

    public FilterListViewModel() { } 

    public FilterListViewModel(Type selectedType) 
    { 
     if (selectedType == typeof(Artist)) 
     { 
      returnedArray = Artist.ReturnArtistNames(context); 
     } 

     // put together ObservableCollection 
     foreach (var str in returnedArray) 
     { 
      entries.Add(str); 
     } 

     SelectedType = selectedType; 
    } 
} 

FilterLister

을 UserControl을 위해 전화. xaml

<Label Name="labelToBind" Content="{Binding TypeName}" Grid.Row="0" /> 

FilterLister.cs

당신은 당신의 ViewModel에서에서 INotifyPropertyChanged 인터페이스를 구현 싶었어요
public partial class FilterLister : UserControl 
{ 
    FilterListViewModel filterListViewModel; 
    private MyEntities context; 

    public FilterLister() 
    { 
     InitializeComponent(); 
     context = new MyEntities(); 
    } 

    public void Initialise(Type objectType) 
    { 
     filterListViewModel = new FilterListViewModel(objectType); 
     this.DataContext = filterListViewModel; 
    } 
} 

답변

1

, 유형 이름은 null입니다. 코드에서, 나는 당신처럼 설명 할 생각 :

데릭 제안으로
public string TypeName 
{ 
    get{ return SelectedType.Name.ToString();} 
} 

, 당신은 통지에서 INotifyPropertyChanged 인터페이스를 추가해야하지만, 처음에 바인딩에 영향을 미치지 않습니다. ViewModel의 데이터가 정확하지만 UI에 채워지지 않았다고 생각되면 DataContext와 Binding을 확인해야합니다.

1

은, UI에 "새로 고침 메시지"를 보낼 수있는 바인더 제본 속성에 필요한. 여기

인터페이스, 당신은이를 구현하는 방법 : 당신이 레이블에 아무 것도 보지 않았다 귀하의 코드를 기반으로 이 http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

public class FilterListViewModel : INotifyPropertyChanged 
{ 
MyEntities context = new MyEntities(); 
ObservableCollection<string> entries = new ObservableCollection<string>(); 

public Type SelectedType; 
private string p_TypeName; 
public string TypeName 
{ 
    get { return p_TypeName; } 
    set { 
     //p_TypeName = value; 
     p_TypeName = SelectedType.Name.ToString(); 
    NotifyPropertyChanged(); 

    } 
} 

public FilterListViewModel() { } 

public FilterListViewModel(Type selectedType) 
{ 
    if (selectedType == typeof(Artist)) 
    { 
     returnedArray = Artist.ReturnArtistNames(context); 
    } 

    // put together ObservableCollection 
    foreach (var str in returnedArray) 
    { 
     entries.Add(str); 
    } 

    SelectedType = selectedType; 
} 

private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
관련 문제