";占位符“;正在StaticResource中绑定
本文关键字:StaticResource 正在 绑定 quot 占位符 | 更新日期: 2023-09-27 18:25:25
我有一个ListView
,它从静态资源中获取其Style
。例如,我的MainWindowViewModel
中有一个自定义对象的ObservableCollection
。此对象包含一些属性,包括MyCustomObjectProperty
。MainWindowViewModel
还具有ICommand
、MyCommandOne
。
我的风格(为了简单起见,裁剪了一些片段):
<Window.Resources>
<Style x:Key="MyListViewStyle" TargetType="ListView">
<!--(Removed extra Setters)-->
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Button Command="{Binding Path=DataContext.MyCommandOne,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
CommandParameter="{Binding Path=MyCustomObjectProperty}">
<Button.Template>
<!--(Styling)-->
</Button.Template>
</Button>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
创建ListView
:
<ListView Grid.Column="1"
Grid.Row="1"
ItemsSource="{Binding Path=MyObservableCollection}"
Style="{StaticResource MyListViewStyle}"
Margin="5"
BorderThickness="0"
Background="LightGray"
/>
此代码有效。当我单击ListView
中的按钮时,MyCommandOne
将使用由单击的列表视图项表示的自定义对象中的参数执行。
我的问题是:有没有办法用某种占位符替换DataContext.MyCommandOne, RelativeSource...
,这样我就可以在实际ListView
的标记中指定所需的命令?通过这种方式,我可以用这种风格创建更多的ListView
,但执行不同的命令。
Workaround-将ListView
的Tag
设置为实际命令,然后从Button
绑定到ListView
的Tag
属性。
<DataTemplate>
<Button Command="{Binding Tag, RelativeSource={RelativeSource FindAncestor,
AncestorType=ListView}}"/>
........
</DataTemplate>
在ListView
:中
<ListView Tag="{Binding MyCommandOne}"/>