2012-03-12 92 views
0

我一直在玩WPF一段時間,我喜歡它是如何非常靈活。我已閱讀如何綁定到具有單個參數的方法(使用轉換器)。然而,純粹假設,是否有辦法綁定到可以訪問類中局部變量的函數?綁定到訪問局部變量的方法

例如,假設我有一個TextBoxes列表框,通過DataTemplate綁定到字符串列表,在後面的代碼中定義和操作。但是,不是顯示整個字符串,而是每個文本框只顯示其相應字符串的前N個單詞,這很容易通過接受字符串和N作爲參數的方法完成。但是,N對用戶來說是免費配置的,因此必須是局部變量。爲了使它成爲一個靈活的控件,N不能是一個靜態變量,因爲我們希望它有許多帶有不同N的ListBox的窗口;此外,這將是非常不雅觀。

現在我們不能使用轉換器作爲轉換器只接受一個變量,而我們需要訪問一個N.我們不能作弊和使用靜態變量。

我們也無法將文本框綁定到可以訪問局部變量的局部屬性,就像我們對普通對象所做的那樣,因爲我們綁定了整個對象列表。

從我看到的,ObjectDataProvider只允許您調用給定對象的類的方法,而不是在窗口中定義的方法。我相信,爲了實現這樣簡單的功能,創建一個新類並將N複製到類的每個實例都是一種浪費。

當然,在一個真實的場景中,可以通過諸如創建一個包含前一段落中的字符串和N的對象,或包括字符串和包含字符串的前兩個字的另一個字符串預計算。我只是問,WPF是否存在這樣的功能,因爲它符合WPF所基於的概念,並且我相信這樣的功能會以某種方式有用。

如果解決方案立即顯而易見,我很抱歉;我一直在尋找幾個小時。

如果有解決方案,有沒有辦法在XAML中完全這樣做,只有在代碼中定義的方法在後面?

編輯:非常感謝您的建議,Clemens ... N不能作爲ConvertParameter傳遞,因爲它不可能綁定到ConvertParameter。至於第一個建議,我正在嘗試,但在IMultiValueConverter的Convert方法中出現錯誤Specified cast is not valid.。值[1]不是N,而是DependencyProperty.UnsetValue。下面是代碼:

XAML

<MultiBinding> 
    <MultiBinding.Converter> 
     <my:StringShorternerConverter /> 
    </MultiBinding.Converter> 
    <Binding Path="Title" /> 
    <Binding ElementName="me" Path="N" /> 
</MultiBinding> 

內StringShorternerConverter

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    return ShortenText((String)values[0], (Int32)values[1]); 
} 

編輯2:看起來這個錯誤是由於一些無關痛癢的錯誤。是的,它的工作原理。非常感謝。

+0

有關反饋,您應該對答案發表評論,否則回答者不會意識到。編輯問題時,他/她不會自動收到通知。編輯本身:N是如何定義的,它在哪裏設置?請顯示一些代碼。 – Clemens 2012-03-12 13:47:10

回答