Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 一个文本框和子对象的可观察集合之间的数据绑定_Wpf_C# 4.0_Data Binding_Observablecollection_Children - Fatal编程技术网

Wpf 一个文本框和子对象的可观察集合之间的数据绑定

Wpf 一个文本框和子对象的可观察集合之间的数据绑定,wpf,c#-4.0,data-binding,observablecollection,children,Wpf,C# 4.0,Data Binding,Observablecollection,Children,我有以下情况: class A { myCollection = new ObservableCollection<B>(); .... myCollection.Add(new B1()); myCollection.Add(new B2()); .... for each (B b in myCollection) b.DoWork(); } 在我的xaml文件中,datacontext是一个,我不知道如何设置绑定: <Window.DataContext&

我有以下情况:

class A { myCollection = new ObservableCollection<B>(); 
....
 myCollection.Add(new B1());
 myCollection.Add(new B2());
....
for each (B b in myCollection)
   b.DoWork();

}
在我的xaml文件中,datacontext是一个,我不知道如何设置绑定:

<Window.DataContext>
    <!-- Declaratively create an instance of A-->
    <VW:A />
</Window.DataContext>
....
<TextBox Text="{Binding Path=????State????}" />
我试过几种绑定指令,但都不起作用

感谢谢里根的解决方案:

如果您想将集合中所有对象的所有属性显示在一起,则SHERIGAN解决方案很好,但是

我实际上试图实现的是拥有一个对象集合,所有对象都更新相同的视觉组件。集合中的对象表示状态,因此始终只有一个活动对象。 所以我做的是编辑A类:

class A { myCollection = new ObservableCollection<B>(); 
....
 private B temp;
 myCollection.Add(new B1());
 myCollection.Add(new B2());
....
for each (B b in myCollection) {
   temp = b
   temp.DoWork();
}

public B TEMP
    {
        get
        {
            return temp;
        }

        set
        {
            temp = value;
            OnPropertyChanged( "TEMP" );
        }
    }
class A{myCollection=newobserveCollection();
....
私人B临时工;
myCollection.Add(新B1());
myCollection.Add(新B2());
....
对于每个(myCollection中的B){
温度=b
工作温度();
}
公共B临时工
{
得到
{
返回温度;
}
设置
{
温度=值;
不动产变更(“临时”);
}
}
在xaml中

<TextBox Text="{Binding Path=TEMP.State}"/>

}

}

基本上,类
a
中需要一个
public
集合属性,它还需要实现
INotifyPropertyChanged
接口。然后需要将该集合属性绑定到集合控件:

<ListBox ItemsSource="{Binding CollectionProperty}">
    ...
</ListBox>
我觉得在XAML中使用基类是行不通的,但我可能错了。您可能需要将
DataType
属性改为
B1
B2
。这对于
A
的实例可能有效,也可能无效。。。我现在不能测试这个


更新>>>

听起来您的集合中有一个空项目,该项目生成了一个
ItemTemplate
TextBox
)。但是,您实际上不必使用集合控件来显示集合中的项目。。。如果您只想显示一个项目,您应该能够使用索引器
绑定。Path
语法:

<TextBox Text="{Binding CollectionProperty[0].State}" />


给出了编译错误,所以我使用了,但绑定仍然不起作用。您得到了什么错误?希望您了解并且需要为我在示例中使用的
YourXmlNamespace
前缀添加一个前缀。好的,我在定义
xmlns:custom=“clr namespace:mynamespace.BSubNamespace”
时成功了。它也可以在不声明xmlns:custom和使用
的情况下工作。核心概念是,我首先需要绑定集合,以绑定到集合中包含的对象内的属性。但现在我遇到了一个视觉问题:似乎将textbox放在列表框内会在正确的文本框下再添加一个textbox。。。有什么想法吗?我明白了,listbox会自动为mycollection中的每个对象创建一个文本框。我将我的最终解决方案发布在公开帖子中。无论如何,你能解释一下使用
之间的区别吗?
<ListBox ItemsSource="{Binding CollectionProperty}">
    ...
</ListBox>
<ListBox ItemsSource="{Binding CollectionProperty}">
    <ListBox.ItemTemplate>
        <DataTemplate DataType="{x:Type YourXmlNamespace:B}">
            <TextBox Text="{Binding Path=State}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
<TextBox Text="{Binding CollectionProperty[0].State}" />