2016-11-25 130 views
2
<Window.Resources> 
    <local:WeightConverter x:Key="weightConverter" RequiredUnit="{Binding VmProp}" /> 

如何視圖模型屬性綁定到依賴屬性的轉換器

<TextBlock Text="{Binding Weight, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource weightConverter}}" /> 



public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = new MyViewModel(); 

在MyViewModel我有定期的財產

private string vmProp; 

    public string VmProp 
    { 
     get 
     { 
      return "kg"; 
     } 
    } 

和轉換器類有DependencyProperty的是:

public class WeightConverter : DependencyObject, IValueConverter 
{ 
    public static readonly DependencyProperty RequiredUnitProperty = DependencyProperty.Register("RequiredUnit", typeof(string), typeof(WeightConverter), null); 
    public string RequiredUnit 
    { 
     get 
     { 
      return (string)this.GetValue(RequiredUnitProperty); 
     } 

     set 
     { 
      this.SetValue(RequiredUnitProperty, value); 
     } 
    } 


    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
        double dblValue; 

     if (double.TryParse(value.ToString(), out dblValue)) 
     { 
      if (this.RequiredUnit == "kg") 
      { 
       return dblValue; 
      } 

      else 
      { 
       return dblValue * 10; 
      } 

      return dblValue; 
     } 

     return 0; 
    } 

當我做bi nding在XAML代碼工作:

<Window.Resources> 
    <local:WeightConverter x:Key="weightConverter" RequiredUnit="kg"/> 

但是當我嘗試其綁定到ViewModelProperty的「RequiredUnit」對象始終是零。

如何將依賴項屬性綁定到ViewModel屬性?

回答

0

其原因是因爲您試圖從資源綁定到視圖模型屬性,但datacontext對資源不可用。在您的輸出日誌中,您必須獲得綁定表達式錯誤。看看輸出窗口。

有多種方式可以使這項工作。 一種方法是給你的窗前,彷彿X名稱:NAME =「主窗口」,然後在你的綁定也一樣:

<local:WeightConverter x:Key="weightConverter" RequiredUnit="{Binding DataContext.VmProp, ElementName=MainWindow}" /> 

另一種方法是使用相對源綁定它做的事。

+1

你的綁定是的,你是對我有datacontext的問題。我做了兩種方法,但我仍然沒有解決問題。 – leapold

0

x:Name="leapold"到您的窗口/用戶控件

,並與x:reference

<local:WeightConverter x:Key="weightConverter" RequiredUnit="{Binding DataContext.VmProp, Source={x:Reference leapold}}"/> 
相關問題