我試圖解決這個事實,我無法爲ConverterParameter
指定動態值。 See my other question for why I need to bind a dynamic value to ConverterParameter
- 我不喜歡目前發佈的解決方案,因爲它們都需要我覺得應該對View Model進行不必要的更改。如何在靜態資源上設置依賴項屬性?
要嘗試解決這個問題,我創建了一個自定義轉換器,並在該轉換器暴露一個依賴屬性:
public class InstanceToBooleanConverter : DependencyObject, IValueConverter
{
public object Value
{
get { return (object)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(object), typeof(InstanceToBooleanConverter), null);
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null && value.Equals(Value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(true) ? Value : Binding.DoNothing;
}
}
有沒有辦法使用綁定(或樣式setter方法來設置這個值,或其他瘋狂的方法)在我的XAML?
<ItemsControl ItemsSource="{Binding Properties}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type local:SomeClass}">
<DataTemplate.Resources>
<!-- I'd like to set Value to the item from ItemsSource -->
<local:InstanceToBooleanConverter x:Key="converter" Value="{Binding Path=???}" />
</DataTemplate.Resources>
<!- ... ->
到目前爲止我見過的例子只綁定到靜態資源。
編輯:
我得到了一些反饋意見,只有一個與我張貼的XAML轉換器實例。
我可以解決此通過將資源在我的控制:
<ItemsControl ItemsSource="{Binding Properties}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type local:SomeClass}">
<RadioButton Content="{Binding Name}" GroupName="Properties">
<RadioButton.Resources>
<!-- I'd like to set Value to the item from ItemsSource -->
<local:InstanceToBooleanConverter x:Key="converter"
Value="{Binding Path=???}" />
</RadioButton.Resources>
<RadioButton.IsChecked>
<Binding Path="DataContext.SelectedItem"
RelativeSource="{RelativeSource AncestorType={x:Type Window}}"
Converter="{StaticResource converter}" />
</RadioButton.IsChecked>
</RadioButton>
<!- ... ->
所以這個問題不會被其共享轉換器:)
是的,我可以看到這是一個問題。但是我注意到,如果我將它設置爲控件上的資源,那麼每個控件都會得到一個實例。如果更有意義,我可以改變我的問題。 – 2011-05-05 20:40:22