我注意到,當我的列綁定到VM中的字段時,一切正常,我按照預期正常工作。但是,由於客戶的一個奇怪的要求,我需要使用多重綁定和轉換器在另一列的狀態發生變化時返回不同的值。所以我結束了這樣的事情。無法通過具有多重綁定和轉換器的列進行排序
<DataGridTextColumn Header="Original">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource OriginalConverter}">
<Binding Path="Status.Id" />
<Binding Path="Original" />
<Binding Path="Substitution" />
</MultiBinding>
</DataGridTextColumn.Binding>
<DataGridTextColumn.ElementStyle>
...
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
我不知道如何使列進行排序。關閉轉換器不是問題,因爲它是電網的主要功能之一。我在我的數據網格組件中使用集合視圖源,如果它有任何相關性的話。轉換器本身如下所示。
public class OriginConverter : IMultiValueConverter
{
public object Convert(Object[] values, Type type, object param, CultureInfo culture)
{
int status = (int) values[0];
int original = ...;
int substitution = ...;
return status < 3 ? original : substitution;
}
}
或者使用轉換器時排序不可用?這聽起來不太可能......
我發現this hint,其實際工作一點點,因爲列取得伴隨排序的列但那種需要與對於顯示值三角形,即轉換器提供的那個,並且在他的例子中它被固定到一個綁定屬性。
您需要將'ConvertBack()'方法添加到您的轉換器以獲取爲您的'DataGridColumn'設置的新值。然後根據它進行排序。 –
@AbinMathew我如何讓網格實際調用* ConvertBack *?現在它根本不被調用。此外,我有點驚訝,轉換**返回**會是一個問題,因爲我希望得到的排序是基於**值轉換爲**的字母和我們**從**轉換的原始值。請解釋。 –
當您在ViewModel中檢索值時,無需調用'ConvertBack()',則將調用'ConvertBack()'。在ConvertBack()中,你需要返回爲GridViewColumn設置的新值。所以集合將保存您的新值,並且您可以基於字母排序集合。 –