我生成文本框的列表一個ItemsControl內,像這樣:動態生成的文本框,並輸入綁定:當把命令
<ItemsControl ItemsSource="{Binding CurrentCandidate.Properties}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DockPanel>
<TextBlock DockPanel.Dock="Top" Text="{Binding DisplayName}" />
<Border DockPanel.Dock="Top">
<TextBox Text="{Binding Value, UpdateSourceTrigger=PropertyChanged}">
<TextBox.InputBindings>
<KeyBinding Command="{?}" CommandParameter={?} Key="PgUp" />
<KeyBinding Command="{?}" CommandParameter={?} Key="Enter" />
</TextBox.InputBindings>
</TextBox>
</Border>
</DockPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
在輸入綁定我要訪問一個命令,是可在ViewModel-Level,與ItemsSource處於同一級別,即。爲了從ItemTemplate模板內訪問它,我用以下解決方法到現在:
<TextBlock x:Name="tbCurrentCandidate"
Tag="{Binding Path=CurrentCandidate}"
Visibility="Hidden"></TextBlock>
<TextBlock x:Name="tbReset"
Tag="{Binding Path=ResetInputCommand}"
Visibility="Hidden"></TextBlock>
<TextBlock x:Name="tbValidate"
Tag="{Binding Path=ValidateCommand}"
Visibility="Hidden"></TextBlock>
<TextBox.InputBindings>
<KeyBinding Command="{Binding ElementName=tbReset, Path=Tag}"
CommandParameter="{Binding ElementName=tbCurrentCandidate, Path=Tag}"
Key="PgUp" />
<KeyBinding Command="{Binding ElementName=tbValidate, Path=Tag}"
CommandParameter="{Binding ElementName=tbCurrentCandidate, Path=Tag}"
Key="Enter" />
</TextBox.InputBindings>
這是一個HTML隱藏場般的解決方法來訪問所不具備的特性我需要他們,但我想一定有比這更好的辦法...
任何人誰可以幫我出:感覺擁抱製作那塊苦難少一點可憐的;-)
您是否嘗試過使用類似於{{Binding RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type ItemsControl}},Path = Name}'?將ItemsControl替換爲具有包含所需命令的DataContext的父控件類型。 – 2012-03-13 13:45:53
是的,這是我發現的一件事:{Binding RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type UserControl}},Path = DataContext.ResetInputCommand}。這不是很漂亮,但它的工作 – 2012-03-13 14:06:57
因爲還沒有其他的反應:你可以發佈這一個,所以我可以將它標記爲答案 – 2012-03-14 09:30:32