Преобразователь значений не вызывается при изменении данных - PullRequest
1 голос
/ 18 августа 2010

Сейчас я работаю над пользовательским элементом управления, в котором у меня есть путь как часть элемента управления. Есть 3 возможных пути, которые я мог бы хотеть показать на основе значений определенных данных. Чтобы определить, какой путь я хочу использовать, у меня есть конвертер значений, который принимает данные и возвращает число, представляющее, какой из путей мне следует использовать.

Моей первой мыслью было просто использовать обратный вызов измененного свойства из двух свойств зависимостей, из которых я получаю данные, но эти обратные вызовы должны быть статическими, а код XAML всегда нестатичным.

Моя вторая попытка - использовать триггеры данных с преобразователем значений, описанным выше. Ниже приведен код, который у меня есть.

               <Path x:Name="path" Stretch="Fill" Width="111.75" Height="118.718" Data="F1M205.917,103.0088C189.333,93.8108,170.128,88.9998,150,88.9998C129.873,88.9998,110.584,93.8108,94.167,102.8408L116.1,144.2508L150,208.7178L183.9,144.2508z" Canvas.Left="0" Canvas.Top="0">
                <Path.Resources>
                    <Style TargetType="{x:Type Path}">
                        <Style.Triggers>
                            <DataTrigger Value="-1">
                                <DataTrigger.Binding>
                                    <MultiBinding Converter="{StaticResource ToleranceRangeTypeChecker}">
                                        <Binding ElementName="UserControl" Path="ToleranceZoneLowerBound" />
                                        <Binding ElementName="UserControl" Path="ToleranceZoneUpperBound" />
                                    </MultiBinding>
                                </DataTrigger.Binding>
                                <Setter Property="Data" Value="F1M205.917,103.0088C189.333,93.8108,170.128,88.9998,150,88.9998C129.873,88.9998,110.584,93.8108,94.167,102.8408L116.1,144.2508L150,208.7178L183.9,144.2508z" />
                                <Setter Property="Width" Value="111.75" />
                                <Setter Property="Height" Value="118.718" />
                                <!--<Setter Property="Canvas.SetLeft"-->
                            </DataTrigger>
                            <DataTrigger Value="0">
                                <DataTrigger.Binding>
                                    <MultiBinding Converter="{StaticResource ToleranceRangeTypeChecker}">
                                        <Binding ElementName="UserControl" Path="ToleranceZoneLowerBound" />
                                        <Binding ElementName="UserControl" Path="ToleranceZoneUpperBound" />
                                    </MultiBinding>
                                </DataTrigger.Binding>
                                <Setter Property="Data" Value="F1M150,88.9998C129.873,88.9998,110.584,93.8108,94.167,102.8408L150,208.7178C150,208.7178,150,114.157407529625,150,88.9998z" />
                                <Setter Property="Width" Value="55.917" />
                                <Setter Property="Height" Value="118.718" />
                                <!--<Setter Property="Canvas.SetLeft"-->
                            </DataTrigger>
                            <DataTrigger Value="1">
                                <DataTrigger.Binding>
                                    <MultiBinding Converter="{StaticResource ToleranceRangeTypeChecker}">
                                        <Binding ElementName="UserControl" Path="ToleranceZoneLowerBound" />
                                        <Binding ElementName="UserControl" Path="ToleranceZoneUpperBound" />
                                    </MultiBinding>
                                </DataTrigger.Binding>
                                <Setter Property="Data" Value="F1M205.917,103.0088C189.333,93.8108 170.128,88.9998 150,88.9998 150,113.365662567029 150,208.7178 150,208.7178L183.9,144.2508z" />
                                <Setter Property="Width" Value="111.75" />
                                <Setter Property="Height" Value="118.718" />
                                <!--<Setter Property="Canvas.SetLeft"-->
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>

Еще одна мысль, которая у меня была, заключалась в том, чтобы вместо этого фактически иметь 3 разных пути и использовать сеттеры для изменения видимости каждого, но я думаю, что иметь один путь и изменять его свойства было бы более логичным. Я также предпочел бы один путь, потому что моей целью было бы в конечном итоге оживить между путями, а не делать так, чтобы они мгновенно менялись.

Спасибо!

1 Ответ

2 голосов
/ 18 августа 2010

Вы можете получить экземпляр, приведя параметр sender в обратных вызовах изменения свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...