usercontrol中itemsControl的WPF数据绑定问题

usercontrol中itemsControl的WPF数据绑定问题,wpf,data-binding,user-controls,itemscontrol,Wpf,Data Binding,User Controls,Itemscontrol,我有两个类和一个usercontrol class pvalue { public string value; public bool selected; public pvalue(string v, bool s) { value = v; selected = s; } } class param { public string name { get; set; } public string pre

我有两个类和一个usercontrol

class pvalue
{
    public string value;
    public bool selected;
    public pvalue(string v, bool s)
    {
        value = v;
        selected = s;
    }
}

class param
{
    public string name { get; set; }
    public string prefix { get; set; }
    public IList<pvalue> values { get; set; }   

    public param(string _name, string _prefix, IList<pvalue> _values)
    {
        name = _name;
        prefix = _prefix;
        values = _values;
    }
}


<UserControl DataContext="{Binding param}" >
 <Grid>...
    <ItemsControl x:Name="itemctl" ItemsSource="{Binding Path=values}">
    ...
       <ItemsControl.ItemTemplate>
             <DataTemplate>
                <ToggleButton IsChecked="{Binding Path=selected}">
                    <TextBlock Text="{Binding Path=value}" />
                </ToggleButton>
            </DataTemplate>               
        </ItemsControl.ItemTemplate>
    </ItemsControl>
 </Grid>
</UserControl>
类pvalue
{
公共字符串值;
选择公共图书馆;
公共pvalue(字符串v,布尔值s)
{
值=v;
所选=s;
}
}
类参数
{
公共字符串名称{get;set;}
公共字符串前缀{get;set;}
公共IList值{get;set;}
公共参数(字符串名称、字符串前缀、IList值)
{
名称=_名称;
前缀=_前缀;
值=_值;
}
}
...
...
我的目的是在应用程序中创建类,并将其设置为usercontrol的datacontext。但我是WPF的新手,这有点让我不知所措。数据绑定不起作用-“BindingExpression路径错误:“在对象”“pvalue”“上找不到值”属性


我可以得到一些帮助来整理usercontrol的数据绑定吗?非常感谢。

这里似乎有一些地方不对劲:

  • 您应该绑定到属性(使用getter和setter)而不是字段,因此将公共字段更改为pvalue类型上的属性
  • 如果希望UI在这些属性值更改时更新,请研究在pvalue和param类型上实现
    INotifyPropertyChanged
  • 我会用PascalCase作为你的类名和属性
  • 从参数名称中删除下划线
  • 使pvalue参数名称更具描述性
  • 您正在将UserControl的DataContext绑定到类似于类型名(param)的对象,您打算如何让UserControl获取您的param类型的实例?通常,您可以将其作为usercontrol的dependency属性来执行,然后在使用该控件时,可以将usercontrol的Param dependency属性绑定到在当前DataContext上返回Param类型实例的属性(如果使用MVVM,通常是ViewModel)

在UserControl定义中包含您的解决方案名称空间,然后将该类作为资源包含在以下资源中


然后修改代码,如下所示


...

谢谢,要点很好。在我修复了类pvalue的属性声明之后,测试用例实际上正在工作。