2012-03-17 79 views
0

在i對象綁定到一個WPF控制我想顯示屬性,以根據不同的單元系統上的不同級別的精確度被使用。例如,如果值爲真,我有一個屬性IsMetric我想顯示一個小數位的值,如果它是假的,然後三位小數。目前,我將它添加到資源的調用之前的構造函數InitialiseComponent()這樣的靜態資源字符串:DataTrigger上的StringFormat在WPF

public RoomDisplay(Room room) 
{ 
    string format = room.IsMetric ? "{0:0.0}" : "{0:0.000}"; 
    this.Resources.Add("format", format); 
    InitializeComponent(); 
    this.DataContext = room; 
} 

然後XAML中看起來是這樣的:

<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=Breadth, StringFormat={StaticResource ResourceKey=format}}" TextAlignment="Right" /> 

這已經高達現在工作。然而,這種方法隨着嵌入式控制而下降,我從未對這種方法感到滿意。

我已經調查DataTriggers,沿着線的東西:

<DataTrigger Binding="{Binding IsMetric}" Value="true"> 
    <Setter Property="Text" Value="{Binding Breadth, StringFormat=F1}"/> 
</DataTrigger> 
<DataTrigger Binding="{Binding IsMetric}" Value="false"> 
    <Setter Property="Text" Value="{Binding Breadth, StringFormat=F3}"/> 
</DataTrigger> 

然而,這是一個痛苦添加到所有的TextBlocks。理想情況下,我想把它放入一個風格,但我不能找出一個方法來設置沒有文本值的StringFormat。

的另一種選擇是有對象的格式屬性和綁定的StringFormat到,但我寧願呆在遠離這一切。有任何想法嗎? 謝謝。

+1

你有沒有考慮多值轉換器? – Paparazzi 2012-03-17 12:54:33

+0

轉換器也有你可以使用的'System.Globalization.CultureInfo culture'參數。 – Silvermind 2012-03-17 13:49:40

回答

1

說真的,我覺得最簡單的事情是在房間類有一個屬性BreadthString,只要你記得發在適當的setter方法的正確通知。

class Room { 
    private double _breadth; 
    public Breadth { 
     get { return _breadth; } 
     set { _breadth = value; Raise("Breadth"); Raise("BreadthString"); } 
    } 

    private bool _isMetric; 
    public bool IsMetric { 
     get { return _isMetric; } 
     set { _isMetric = value; Raise("IsMetric"); Raise("BreadthString"); } 
    } 

    public string BreathString { 
     get { return Breadth.ToString(IsMetric ? "0.0" : "0.000"); } 
    } 
} 

您建議有一個「格式」屬性房間 - 我不認爲這會工作,因爲的StringFormat是不是在依賴對象的依賴屬性(我可能是錯在這裏),但也有許多其他方式。例如,您可以有一個客戶轉換器(特別是,如果存在多於必須呈現的廣度屬性)。或者,您可以擁有從TextBlock派生的自定義控件。或者你可以有兩個DataTemplates和一個TemplateTemplateSelector。或者你可以有一個ControlTemplate。

+0

「我不認爲這會工作,因爲的StringFormat是不是在依賴對象的依賴屬性」 - 你說得對,這 – 2012-03-19 11:04:24

+0

我並沒有跟這麼多sucess。我已經看了你的大部分建議沒有成功,目前我正在嘗試轉換器的方法在這裏http://stackoverflow.com/questions/9982117/ivalueconverter-with-bound-dependency-properties – 2012-04-02 19:01:27