C# WPF-如何重用单个对象的数据模板进行收集?
当我为我的应用程序创建数据类型-控件映射时,我发现使用ContentPresenter和数据模板是可行的。我已经成功地做到了这一点。对于这个代码段,我包含了System.String数据类型的映射。但是,我注意到,如果我绑定了一个字符串列表并为其映射了一个通用集合控件,那么这些字符串将表示为一个文本框,而不仅仅是一个普通字符串,如下图所示(请参见StringCollection) 现在,我希望使用这个杠杆,以便在为DynamicPropertyValue分配集合时重用控件。如何实现文本框的多重绑定?如果PropertyValue是数组,则绑定到其元素;else绑定到PropertyValue本身C# WPF-如何重用单个对象的数据模板进行收集?,c#,wpf,xaml,C#,Wpf,Xaml,当我为我的应用程序创建数据类型-控件映射时,我发现使用ContentPresenter和数据模板是可行的。我已经成功地做到了这一点。对于这个代码段,我包含了System.String数据类型的映射。但是,我注意到,如果我绑定了一个字符串列表并为其映射了一个通用集合控件,那么这些字符串将表示为一个文本框,而不仅仅是一个普通字符串,如下图所示(请参见StringCollection) 现在,我希望使用这个杠杆,以便在为DynamicPropertyValue分配集合时重用控件。如何实现文本框的多重
<DataTemplate>
<StackPanel x:Name="ItemStackPanel" Orientation="Horizontal" Margin="8">
<TextBlock Text="{Binding PropertyName}" FontSize="14" MinWidth="120"
Validation.ErrorTemplate="{x:Null}">
</TextBlock>
<ContentPresenter Margin="48, 0, 0, 0" Content="{Binding PropertyValue}">
<ContentPresenter.Resources>
<DataTemplate DataType="{x:Type System:String}">
<TextBox Text="{Binding ElementName=ItemStackPanel, Path=DataContext.PropertyValue}"
Width="100" Validation.ErrorTemplate="{StaticResource ErrorTemplate}">
</TextBox>
</DataTemplate>
<DataTemplate DataType="{x:Type dataTypes:StringCollection}">
<controls:GenericCollectionControl x:Name="GenericCollectionControl"
ItemsSource="{Binding ElementName=ItemStackPanel, Path=DataContext.PropertyValue}"
Validation.ErrorTemplate="{StaticResource ErrorTemplate}">
</controls:GenericCollectionControl>
</DataTemplate>
</ContentPresenter.Resources>
</ContentPresenter>
</StackPanel>
</DataTemplate>
---修订1---
我通过使用IMultiValueConverter并返回正确的绑定,成功地使其工作
<TextBox Width="100" Validation.ErrorTemplate="{StaticResource ErrorTemplate}">
<TextBox.Text>
<MultiBinding Converter="{StaticResource BindingSelector}">
<Binding Mode="OneWay"></Binding>
<Binding ElementName="ItemStackPanel" Path="DataContext.PropertyValue"></Binding>
</MultiBinding>
</TextBox.Text>
</TextBox>
但是如果绑定模式不是单向的,我有一个例外。我如何实现双向绑定
但是如果绑定模式不是单向的,我有一个例外。我如何实现双向绑定
尝试为第一个绑定指定路径:
<TextBox Width="100" Validation.ErrorTemplate="{StaticResource ErrorTemplate}">
<TextBox.Text>
<MultiBinding Converter="{StaticResource BindingSelector}">
<Binding Path="." />
<Binding ElementName="ItemStackPanel" Path="DataContext.PropertyValue"></Binding>
</MultiBinding>
</TextBox.Text>
</TextBox>
Path=“”是什么意思?这意味着您正在绑定到DataContext本身,我相信这就是您案例中的字符串。双向绑定需要显式路径。