C# 找不到ViewModel数据

C# 找不到ViewModel数据,c#,mvvm,C#,Mvvm,找不到我的项目视图模型元素。我试图在我的WPF用户控件中实现一个ViewModel。但是,绑定工作不正常,并且似乎没有数据。我正在尝试创建一个与之交互的ViewModel,将通用字符串数组和各种其他数据位放入其中 MainWindow.xaml-(用户控制声明) FilterListViewModel.cs public class FilterListViewModel { MyEntities context = new MyEntities(); ObservableCol

找不到我的项目视图模型元素。我试图在我的WPF用户控件中实现一个ViewModel。但是,绑定工作不正常,并且似乎没有数据。我正在尝试创建一个与之交互的ViewModel,将通用字符串数组和各种其他数据位放入其中

MainWindow.xaml-(用户控制声明)

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

您没有在ViewModel中实现INotifyPropertyChanged接口,需要确保绑定属性可以向UI发送“刷新消息”

以下是界面,以及如何实现此功能:

公共类过滤器ListViewModel:INotifyPropertyChanged
{
MyEntities上下文=新的MyEntities();
ObservableCollection条目=新的ObservableCollection();
公共类型选择类型;
私有字符串p_TypeName;
公共字符串类型名
{
获取{return p_TypeName;}
集合{
//p_TypeName=值;
p_TypeName=SelectedType.Name.ToString();
NotifyPropertyChanged();
}
}
公共筛选器ListViewModel(){}
公共筛选器列表模型(类型selectedType)
{
如果(selectedType==typeof(艺术家))
{
returnedArray=Artist.ReturnArtistNames(上下文);
}
//把可观察到的集合放在一起
foreach(返回阵列中的var str)
{
条目。添加(str);
}
SelectedType=SelectedType;
}
私有void NotifyPropertyChanged([CallerMemberName]字符串propertyName=”“)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
}
}
}

根据您的代码,TypeName为空,因此您在标签上看不到任何内容。根据您的代码,我认为您希望描述如下:

public string TypeName
{
   get{ return SelectedType.Name.ToString();}
}
正如deryck所建议的,您应该为通知添加INotifyPropertyChanged接口,但它不应该在第一时间影响绑定。若您认为ViewModel的数据是正确的,但并没有在UI上填充,那个么应该检查DataContext和绑定

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;
    }
}
<Label Name="labelToBind" Content="{Binding TypeName}" Grid.Row="0" />
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;
    }
}
    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));
        }
    }
 }
public string TypeName
{
   get{ return SelectedType.Name.ToString();}
}