У меня есть проект MVV MVVM, где я пытаюсь установить значение настраиваемого прикрепленного свойства с помощью мультиконвертера, которому должно быть передано свойство DataContext (ViewModel) и другое пользовательское прикрепленное свойство на элементе.Использование multibinding для установки пользовательского прикрепленного свойства в WPF
Я могу привязать свойство к viewmodel напрямую, используя синтаксис атрибута xaml, но у меня возникли проблемы с пониманием того, как установить значение вложенного свойства с помощью мультиконвертера.
<StackPanel>
<StackPanel.Resources>
<example:HelpTextConverter x:Key="ConvertHelpText"></example:HelpTextConverter>
</StackPanel.Resources>
<!-- shows binding the help text properties directly to the ViewModel's property -->
<Border example:HelpTextProperties.HelpText="{Binding HelpText}"></Border>
<!--how to set the HelpText attached property as the result of passing the DataContext.HelpText and the HelpTextProperties.ShowHelpText property to the HelpTextConverter?-->
<Border>
<example:HelpTextProperties.HelpText>
<!--does not compile-->
</example:HelpTextProperties.HelpText>
</Border>
</StackPanel>
код, например, прилагаемые свойства и IMultiValueConverter ниже.
class HelpTextProperties
{
public static readonly DependencyProperty ShowHelpTextProperty =
DependencyProperty.RegisterAttached("ShowHelpText", typeof(bool), typeof(HelpTextProperties),
new UIPropertyMetadata(false));
public static bool GetShowHelpText(UIElement target)
{
return (bool)target.GetValue(ShowHelpTextProperty);
}
public static void SetShowHelpText(UIElement target, bool value)
{
target.SetValue(ShowHelpTextProperty, value);
}
public static readonly DependencyProperty HelpTextProperty =
DependencyProperty.RegisterAttached("HelpText", typeof(LabelVM), typeof(HelpTextProperties),
new UIPropertyMetadata(null));
public static LabelVM GetHelpText(UIElement target)
{
return (LabelVM)target.GetValue(ShowHelpTextProperty);
}
public static void SetHelpText(UIElement target, LabelVM value)
{
target.SetValue(ShowHelpTextProperty, value);
}
}
class HelpTextConverter : IMultiValueConverter
{
/// <summary>
/// returns the label in values[0] if values[1] is true
/// </summary>
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
LabelVM labelVM = (LabelVM)values[0];
if (values[0] == DependencyProperty.UnsetValue) { return null; }
if (values[1] is bool)
{
if ((bool)values[1]) { return labelVM; }
}
return null;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Спасибо за любую помощь, которую вы можете предложить!
Я надеялся избежать этого пути, но в конечном итоге пошел таким путем. – eoldre
Это то, как я знаю, для выполнения нескольких привязок ... Я тестировал и работал –