我真正喜歡WPF的東西之一是我的視圖可以聲明性構建的程度,即。使用XAML而不是代碼隱藏。WPF:用於輸入綁定的CommandParameters
現在我真的被難倒化InputBindings,因爲他們的CommandParameters不接受綁定。我想我的案例是非常通用和直接的,但我不明白我如何才能做到這一點,而不訴諸代碼隱藏。考慮:
<ListBox Name="casingsListBox" ItemsSource="{Binding Path=Casings}" SelectedValuePath="Id">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Title}"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.InputBindings>
<!-- Doesn't work: -->
<MouseBinding Gesture="LeftDoubleClick"
Command="ApplicationCommands.Open"
CommandParameter="{Binding RelativeSource={RelativeSource Self} Path=SelectedValue}"/>
</ListBox.InputBindings>
</ListBox>
這不起作用,因爲MouseBinding的CommandParameter的綁定表達式是非法的。
我問自己:什麼是增加點擊鼠標手勢列表框,如果我不能得到所選擇的值的點?
這可以容易地使用代碼隱藏的事件處理程序,當然,或者通過具有該命令消費者提取命令源的ID解決,但也有幾個原因,這是不希望的。除了大量的代碼隱藏代碼首先破壞了WPF的一些目的之外,這使得在Expression Blend中工作的UI設計師沒有多少權力。而且,該死的,我的命令參數應該是一個id,而不是一些UI元素!
主觀:有這麼瀏覽了一會兒,我通過我的WPF相關的問題看的代碼量襲擊。我感覺到我們的開發人員堅持我們的舊習慣,並高興地在代碼隱藏文件中進行攻擊,而不是試圖利用WPF應該代表的UI構建新鮮感。你怎麼看?
但最重要的:任何人都可以告訴我一個代碼免費的解決方法,這個看似平凡的問題?最好沒有可怕的黑客,如this one。
我只是偶然發現了這個問題,並且對我找到的解決方案還不滿意。我會開始一個小賞金,看看自2009年以來是否有變化=) – Jens 2010-07-05 15:32:52