2011-05-05 159 views
2

推薦的方式處理基本上是字符串格式的計算屬性是什麼?在View中還是在ViewModel中?目前,我已經在視圖中得到這個:MVVM計算屬性

<StackPanel Orientation="Horizontal"> 
    <TextBlock Style="{StaticResource FootnoteTextStyle}" Text="Free Memory (KB): " /> 
    <TextBlock Style="{StaticResource FootnoteTextStyle}" Text="{Binding MemoryRemain}" /> 
    <TextBlock Style="{StaticResource FootnoteTextStyle}" Text="/" /> 
    <TextBlock Style="{StaticResource FootnoteTextStyle}" Text="{Binding MemoryTotal}" /> 
    <TextBlock Style="{StaticResource FootnoteTextStyle}" Text=" (" /> 
    <TextBlock Style="{StaticResource FootnoteTextStyle}" Text="{Binding MemoryRemainPercent}" /> 
    <TextBlock Style="{StaticResource FootnoteTextStyle}" Text="%)" /> 
</StackPanel> 

是更好地把這個視圖模型爲String類型的計算性能,然後只綁定了一個TextBlock的?

回答

3

它也有可能在XAML中使用string.format。我想你可以XAML中重寫此:

<StackPanel Orientation="Horizontal"> 
    <TextBlock> 
     <TextBlock.Text> 
      <MultiBinding StringFormat="Free Memory (KB): {0}/{1} ({2}%)"> 
       <Binding Path="MemoryRemain" /> 
       <Binding Path="MemoryTotal" /> 
       <Binding Path="MemoryRemainPercent" /> 
      </MultiBinding> 
     </TextBlock.Text> 
    </TextBlock> 
</StackPanel> 

國際海事組織,這是一個有點清潔,因爲你看到的字符串作爲一個整體,就像在代碼。我也同意slugster和Myles J的格式應該由視圖來完成。

+0

這是一個好主意,使用多重綁定,沒有想到這一點。 – user380689 2011-05-05 23:59:23

0

我通常創建其他屬性並將格式設置在視圖模型中的getter中。它是觀點的模型,關注如何展示。我想這也使顯示格式可測試。

+1

但是,虛擬機應該是不可知的 - 它知道它向用戶界面呈現一個字符串,但不知道該字符串將如何顯示。文本的構建可以在虛擬機中完成,但格式化任何值都應該由視圖完成。 (即VM保持值3.1415926,它不知道該視圖只會顯示3.14)。 – slugster 2011-05-05 05:55:34

+0

有趣的是,我一直認爲視圖模型是視圖的非視覺表示,而視圖只是簡單地顯示數據。 – 2011-05-05 13:51:41

+0

是的,有很多關於使用MVVM時應該在VM中的解釋。即使像enum-> colors這樣的東西可以通過使用轉換器在視圖中專門處理。就我個人而言,我通過將VM作爲接口顯示給View來進一步限制它,所以MyView接收到一個IMyViewModel。 – slugster 2011-05-06 00:06:30

2

我同意slugster的評論「格式化任何值應該由視圖完成」。我只想補充一點,你總是可以編寫一個自定義轉換器來處理事物的格式化方面。