Проблема с привязкой в ​​конвертере в настройках Silverlight - PullRequest
1 голос
/ 09 февраля 2010

Я получил здесь xaml, и то, что я пытаюсь сделать, это просто связать вызов свойства Property (не реальное имя) по ширине прямоугольника и преобразовать значение этого свойства с именем конвертера Conv, и оно работает отлично с {Свойство TemplateBinding} или DataContext = {Свойство TemplateBinding} или с относительным источником (как в примере кода).

Моя проблема в том, что converterParameter также должен быть свойством привязки, но я не могу связать какое-либо свойство в converterParameter. Таким образом, 30 в образце должно быть что-то вроде {Binding Path = SecondProperty}. Если у кого-то возникла такая проблема или, может быть, у кого-то есть другой способ связать вещи в пользовательском контроле, большое спасибо;)

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:controls="clr-namespace:RatingControl">
  <Style TargetType="controls:Ctr">
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="controls:Ctr">
          <Grid>
            <Grid.Resources>
              <controls:Converter x:Name="Conv" />
            </Grid.Resources>
            <Rectangle x:Name="rect" Width="{Binding Path=Property, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource Conv}, ConverterParameter=30}" Height="20" />

Ответы [ 4 ]

0 голосов
/ 10 февраля 2010

Это действительно хорошее решение, но оно не работает, потому что мое первое свойство должно быть bind (twoWay), потому что, если я получу какие-либо изменения, конвертер должен снова преобразовать значение, чтобы я получил результат обратно и показал реальный результат.

0 голосов
/ 09 февраля 2010

Вы можете добавить свойство в класс Converter и связать его с ним.

0 голосов
/ 09 февраля 2010

Вы не можете привязать к свойству объекта Binding, так как на самом деле это не DependencyProperty Связывание не является DependencyObject. Это понятно, можете ли вы представить себе сложность управления деревьями зависимостей и возможность рекурсивных или циклических привязок в привязках.

Однако вы можете использовать специализированный конвертер для задачи: -

public class MySpecialConverter: IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Ctr obj = (Ctr)value;
        var val = obj.Property;
        var param = obj.SecondProperty;
        // Do your intended code with val and param here.
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException("This converter only works for one way binding");
    }
}

теперь ваш Xaml выглядит так: -

<Rectangle x:Name="rect" Height="20"
  Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource Conv}" />
0 голосов
/ 09 февраля 2010
...