我在ResourceDictionary中有一些模板,就像这样:
<DataTemplate x:Key="DefaultOrderItem" DataType="{x:Type m:OrderItem}">
<Grid>
<!-- Row/Column definition and other TextBoxes omitted -->
<Button Grid.Row="0" Grid.Column="0" Name="DecCount" Padding="5,0,5,0"
Command="{Binding OnDecCount}" CommandParameter="{Binding}"><</Button>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding LabelCount, Mode=TwoWay}" FontSize="20"/>
<Button Grid.Row="0" Grid.Column="2" Name="IncCount" Padding="5,0,5,0"
Command="{Binding Path=OnIncCount}" CommandParameter="{Binding}">></Button>
<Button Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" FontSize="20" Padding="5,0,5,0"
Command="{Binding Path=DataContext.OnPrint}" CommandParameter="{Binding}"> Print </Button>
<TextBox Grid.Row="0" Grid.Column="3" Grid.RowSpan="2" Text="{Binding PosNum}" VerticalAlignment="Center"
IsReadOnly="True" BorderThickness="0" FontSize="30" Background="Transparent"/>
<TextBox Grid.Row="0" Grid.Column="10" Text="{Binding LabelType}" FontSize="20" VerticalAlignment="Center"/>
<Button Grid.Row="1" Grid.Column="10" Name="Edit" Margin="3" FontSize="20" Padding="5,0,5,0"
Command="{Binding OnEdit}" CommandParameter="{Binding}"> Edit </Button>
</Grid>
</DataTemplate>
该模板由如下所示的UserControl使用:
<ListView Grid.Row="1" Name="lstItems"
AlternationCount="2"
ItemsSource="{Binding OrderItems}"
ItemContainerStyle="{StaticResource alternatingWithBinding}"
ItemTemplateSelector="{StaticResource OrderItemTemplateSelector}"/>
我读了很多关于命令绑定的文章,但没有一个对我有用。正如你所看到的,我尝试了不同的变体。我也尝试了不同的命令实现。我尝试了RelayCommand的成员,视图后面的代码中的函数,视图模型中的函数和模型中的函数(OrderItem类),但都没有触发。
所以我希望,有人能给我一束光。
后续注解(基于BionicCodes评论):* 我使用Viewmodel优先设计,这意味着,我加载ViewModel,相应的View由xaml声明中编写的依赖项加载。*
2条答案
按热度按时间jyztefdp1#
我在模型类中添加了类似的命令:
这是可行的,但有两点我想改变:
yzxexxkh2#
DataTemplate
的DataContext
* 总是 * 模板化数据项,在您的示例中是OrderItem
。除非OrderItem
定义了像OnDecCount
这样的命令,否则绑定将无法解析。您可以使用
Binding.RelativeSource
属性遍历元素树以找到正确的DataContext
。下面的示例将
Button.Command
属性绑定到父UserControl
的DataContext
中的OnDecCount
属性。Button.CommandParameter
是单击的OrderItem
: