0
簡單的情況下,我想限制GridSplitter
最大的,那麼我就可以創建無形控制(只參與布點),調整其Margin
和使用,限制格列/行定義:限制GridSplitter(MVVM)
<Grid x:Name="limiter" Margin="10,10,20,10" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding StoreWidth, Converter={local:DoubleToGridLengthConverter}, Mode=TwoWay}"
MaxWidth="{Binding ActualWidth, ElementName=gridLimit}" /> <!-- limit maximum -->
...
</Grid.ColumnDefinitions>
<GridSplitter ... />
...
</Grid>
現在複雜的情況:嵌套視圖與GridSplitter
,它必須受到一些父視圖的佈局邏輯的限制。
我該怎麼做?我正在尋求一個舒適的和可重複使用的解決方案。
目前我做複雜方式:
- 添加屬性母VM綁定
limiter
值(例如它的ActualWidth
); - 添加到嵌套的VM屬性
Parent
; - 將父虛擬機實例傳遞給嵌套的一個(使用屬性初始值設定項);
- 現在
GridSplitter
可以通過使用Parent.SplitterMaxWidth
綁定來限制。
有沒有什麼好的和MVVM友好的方法來解決這個問題?
我寧願考慮使用行爲,而不是虛擬的。在我看來ViewModels不應該有像ActualWidth這樣的東西。它們應該包含模型邏輯,而不是演示邏輯。 – mikes
@ mikes,我同意。我究竟能用行爲來做到這一點?您會看到問題:在一個視圖中測量寬度/高度,並且必須在其他視圖中使用該值。這確實是某種觀看通信(如果沒有虛擬機之間的話)。有時可以用'FindAncestor'綁定,但在我的情況下'GridSplitter'從來沒有那麼容易(限制器不是它的父代)。 – Sinatr
視圖如何彼此分離?他們在一個共同的觀點?例如,左視圖控制右視圖參數? – mikes