2015-09-01 61 views
1

我正在編寫一個WPF程序在C#中,我試圖找出一種方法來綁定兩個文本框與十進制值。我有兩個不同的文本框與兩個不同的屬性綁定。WPF - 文本框綁定十進制值

我想當用戶更改「成本」時,「價格」會自動填充,當他更改「價格」時,成本也會自動填充。這產生像循環,我不想要。 而且我注意到,帶有十進制值的文本框綁定不允許添加逗號和點字符'.'','

我該如何解決這兩個問題?

這些文本框的XAML:

<TextBlock Grid.Row="0" Grid.Column="0" Text="Cost" Margin="5,5,0,0" /> 
<TextBox Grid.Row="1" Grid.Column="0" Text="{Binding Cost, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
<TextBlock Grid.Row="0" Grid.Column="1" Text="Price" Margin="5,5,0,0" /> 
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Price ,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 

而且這是兩個性質:

private decimal _cost; 
public decimal Cost 
{ 
    get { return _cost; } 
    set 
    { 
     if (_cost != value) 
     { 
      _cost = value; 
      NotifyOfPropertyChange("Cost"); 

      if (Cost > 0) 
      { 
       Price = Math.Round(_cost * ((decimal)1.50), 2); 
       NotifyOfPropertyChange("Price"); 
      } 

     } 
    } 
} 

private decimal _price; 
public decimal Price 
{ 
    get { return _price; } 
    set 
    { 
     if (_price != value) 
     { 
      _price = value; 
      NotifyOfPropertyChange("Price"); 

      if (Price > 0) 
      { 
       Cost = Math.Round(Price/(decimal)(1.55), 2); 
       NotifyOfPropertyChange("Cost"); 
      }      
     } 
    } 
} 

編輯解決方案 搜索在網絡上,我找到了解決辦法here只是需要添加StringFormat=0{0.0}。希望它能幫助別人。

回答

1

您可以使用backfields來設置值。看到流動

private decimal _cost; 
public decimal Cost 
{ 
    get { return _cost; } 
    set 
    { 
     if (_cost != value) 
     { 
      _cost = value; 
      NotifyOfPropertyChange("Cost"); 

      if (_cost > 0) 
      { 
       _price = Math.Round(_cost * ((decimal)1.50), 2); 
       NotifyOfPropertyChange("Price"); 
      } 

     } 
    } 
} 

private decimal _price; 
public decimal Price 
{ 
    get { return _price; } 
    set 
    { 
     if (_price != value) 
     { 
      _price = value; 
      NotifyOfPropertyChange("Price"); 

      if (_price > 0) 
      { 
       _cost = Math.Round(_price/(decimal)(1.55), 2); 
       NotifyOfPropertyChange("Cost"); 
      }      
     } 
    } 
} 
+0

它幫助我修復循環,但在文本框中我仍然不能插入逗號','和點'。 ',好像文本框不允許插入它們 – puti26

+0

使用轉換器將值前後轉換。 –