C# 在不设置DataContext的情况下绑定整个集合对象和子属性
我正在尝试将列表框绑定到可观察的集合。我不想绑定ListBox条目的文本属性和ListBox条目的背景 列表框在加载的松散xaml文件中定义:C# 在不设置DataContext的情况下绑定整个集合对象和子属性,c#,wpf,xaml,data-binding,listbox,C#,Wpf,Xaml,Data Binding,Listbox,我正在尝试将列表框绑定到可观察的集合。我不想绑定ListBox条目的文本属性和ListBox条目的背景 列表框在加载的松散xaml文件中定义: <TextBox Margin="0,5,5,5" Text="{Binding Path=TB9P}" Background="LightBlue" Name="DetailsviewTB9" Height="20"> <TextBox.ToolTip> <StackPanel>
<TextBox Margin="0,5,5,5" Text="{Binding Path=TB9P}" Background="LightBlue" Name="DetailsviewTB9" Height="20">
<TextBox.ToolTip>
<StackPanel>
<Label FontWeight="Bold" Background="Blue" Foreground="White">Daten</Label>
<ListBox ItemsSource="{Binding Source={StaticResource res_LB1P}}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=StringP}" Background="{Binding Path=SelectedItemP, Converter={StaticResource c_SelectedItemToBackgroundConverter}}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</TextBox.ToolTip>
</TextBox>
基本上,我只想将ListBox绑定到一个LBEntrysCollection,其中SelectedItemP作为背景色的开关,StringP作为文本属性。但我需要其他属性的DetailsViewText上的DataContext
当xaml文件加载StaticResource res_LB1P时,我遇到了一个异常。
如何在ListBox和TextBlock上设置绑定才能使其正确
编辑:
用这个
<ListBox ItemsSource="{Binding Path=LB1P}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=LB1P.StringP}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
已添加项,但文本框中未显示任何文本
现在我真的很困惑。它确实是这样工作的:
<ListBox ItemsSource="{Binding Path=LB1P}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=StringP}" Background="{Binding Path=SelectedItemBrushP}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
很简单,但我想我以前试过这个,但它不起作用
如果一个绑定失败(后台绑定),另一个绑定(文本属性)也可能不工作吗?为什么不这样做
<ListBox ItemsSource="{Binding ElementName=<TextBox's Name>, Path=DataContext">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=StringP}" Background="{Binding Path=SelectedItemP, Converter={StaticResource c_SelectedItemToBackgroundConverter}}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如果我不理解你的问题,请纠正我。是否要将列表框的itemssource绑定到文本框的datacontext?我一直认为ViewModel(datacontext指向的对象)就是视图的模型 所以要解决这个问题,您需要一个对象作为ViewModel,因为只有一个DataContext属性,或者需要添加一个额外的DataContext类属性 第一个选项(一个ViewModel)可以通过创建一个包含ObservableCollection和DetailsViewText的新类来实现:
class ComposedViewModel: INotifyPropertyChanged
{
public LBEntrysCollection LBEntries
{
get { ... }
set { ... }
}
public DetailsViewText Details
{
get { ... }
set { ... }
}
}
第二个选项(额外的DataContext-like属性)可以通过对ListBox进行子分类并添加另一个属性来实现
RelativeSource
遍历树,这不是树关系,因为工具提示
已断开连接,因此它将失败…因此使用ElementName,我没有注意它在工具提示内。我认为ListBox的DataContext已在DetailsViewText上设置。使用此选项时,会添加“项目”,但文本框中不会显示任何文本
<ListBox ItemsSource="{Binding ElementName=<TextBox's Name>, Path=DataContext">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=StringP}" Background="{Binding Path=SelectedItemP, Converter={StaticResource c_SelectedItemToBackgroundConverter}}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
class ComposedViewModel: INotifyPropertyChanged
{
public LBEntrysCollection LBEntries
{
get { ... }
set { ... }
}
public DetailsViewText Details
{
get { ... }
set { ... }
}
}