如何在WPF中创建带参数的模板?

xbp102n0  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(195)

我有3个列表视图。它们非常相似。唯一的区别是它们的ItemsSource绑定到不同的变量。有没有办法用未知的ItemsSource创建一个模板列表视图,并且我可以传递一个参数来填充那个ItemsSource?
我的代码如下:

<ListView Name="View1" ItemsSource={"Binding Student1"}>
    <TextBlock Text={"Binding Name"}/>
</ListView>

<ListView Name="View2" ItemsSource={"Binding Student2"}>
    <TextBlock Text={"Binding Name"}/>
</ListView>

<ListView Name="View3" ItemsSource={"Binding Student3"}>
    <TextBlock Text={"Binding Name"}/>
</ListView>

我在想是否有一种方法可以创造出这样的东西:

<ListView Name="StudentTemplate" ItemsSource=Parameter1>
    <TextBlock Text={"Binding Name"}/>
</ListView>

然后我可以这样使用它:

<Temaplate="StudentTemplate", Parameter="{Binding Student1}"/>
<Temaplate="StudentTemplate", Parameter="{Binding Student2}"/>
<Temaplate="StudentTemplate", Parameter="{Binding Student3}"/>

类似的东西。我知道我的语法没有意义。我是WPF的新手。我正在考虑用C++创建一个函数,它接受一个参数。希望它有意义。

eivnm1vs

eivnm1vs1#

使用ContentPresenter

<Grid>
      <ContentPresenter Content="{Binding Student1}" ContentTemplate="{StaticResource YourTemplate}"/>
</Grid>
<Grid>
      <ContentPresenter Content="{Binding Student2}" ContentTemplate="{StaticResource YourTemplate}"/>
</Grid>

然后,您的模板将如下所示:

<DataTemplate x:Key="YourTemplate">
    <Grid Background="{StaticResource WindowBackgroundColor}">
         <ListView ItemsSource="{Binding}">
            //...
         </ListView>
    </Grid>
</DataTemplate>

这样,您就有了一个绑定到Student1、Student2...的模板。

sdnqo3pr

sdnqo3pr2#

您在考虑模板化方面的思路是正确的
您正在寻找的是一个称为ControlTemplate的东西。
然后,ControlTemplate将以ListView控件为目标,并使用关键字TemplateBinding从ListView传递ItemsSource绑定
您可能希望将其添加为窗口资源,如下所示。

<Window.Resources>
    <ControlTemplate x:Key="ListViewTemplate" TargetType="ListView">
        <ListView ItemsSource="{TemplateBinding ItemsSource}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </ControlTemplate>
</Window.Resources>

这将使您能够在ListView控件上使用此模板,如下所示

<ListView Template="{StaticResource ListViewTemplate}" ItemsSource="{Binding PersonList}"/>
<ListView Template="{StaticResource ListViewTemplate}" ItemsSource="{Binding PersonList1}"/>
<ListView Template="{StaticResource ListViewTemplate}" ItemsSource="{Binding PersonList2}"/>

希望这能给你你要找的东西

相关问题