我在WPF Telerik網格中有一列,我需要根據兩件事來進行限制。MultiBindingConvertor不在WPF MVVM應用程序中的網格上工作
在視圖模型和IsManualChange財產是網格上綁定的列表的屬性的IsEditable財產......
我寫了一個MultiBoolConvertor來處理這一點,並在WPF實現如下:
<telerik:GridViewComboBoxColumn
Header="Selection"
DataMemberBinding="{Binding HandHeldDifference.GRSSelection}"
ItemsSource="{Binding Path=SelectionOptions}">
<telerik:GridViewComboBoxColumn.IsReadOnly>
<MultiBinding Converter="{StaticResource MultiBoolConv}"
ConverterParameter="True">
<Binding
RelativeSource="{RelativeSource FindAncestor,
AncestorType={x:Type StackPanel}}"
Path="DataContext.IsEditable" />
<Binding Path="IsManualChange" />
</MultiBinding>
</telerik:GridViewComboBoxColumn.IsReadOnly>
</telerik:GridViewComboBoxColumn>
但是,進入轉換器的值是一個bool(來自ViewModel)和一個來自IsManualChange!的DependencyProperty.UnsetValue!
public object Convert(object[] values,
Type targetType,
object parameter,
CultureInfo culture)
{
var defaultReturn = false;
if (parameter != null)
{
bool.TryParse(parameter.ToString(), out defaultReturn);
}
if (values == null) return defaultReturn;
if (values.Length < 2) return defaultReturn;
if (values[0] is bool && values[1] is bool)
{
return ((bool) values[0]) && ((bool) values[1]);
}
return defaultReturn;
}
第二值明顯失敗「值[1]是布爾」比較
甲線索也許該轉換器只被調用一次,而不是每行如我期望。
有誰知道我可以如何得到這個工作嗎?
您是否嘗試將PresentationTraceSources.TraceLevel = High添加到第二個Binding並檢查output-Window? – WaltiD 2011-06-16 14:37:03