Привязка данных к XAML во время выполнения - PullRequest
0 голосов
/ 01 декабря 2018

Я строю диаграмму с сеткой и несколькими прямоугольниками, как в этом посте: Рисование диаграммы в вопросах дизайна WPF C #

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

В этой таблице мне нужно связать три значения: 1. Метки 2. MaxHeight - высота (по каждой полосе) 3. Высота

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

Другое приложение может дать мне список или массив со значениями и меткой, но я не знаю, как мне связать неизвестноезначения для прямоугольников.

В приведенном ниже коде я связал ChartLabel, но мне нужны все метки диаграммы, а не одна.Когда я создаю график, я не знаю, сколько баров у меня будет позже.

  <Grid ShowGridLines="True" Background="#FFF5F5DC" Width="Auto" Margin="5,5,5,5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <Rectangle Fill="#FF0000FF" Grid.Column="{Binding Path=Test6_Val, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            <TextBox Text="{Binding Path=ChartLabel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" BorderBrush="#00FFFFFF" Background="#00FFFFFF" HorizontalAlignment="Center" Grid.Column="5" Grid.Row="10" />
            <Rectangle Fill="#FF0000FF" Grid.Column="{Binding Path=Test7_Val, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            <TextBox Text="{Binding Path=ChartLabel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" BorderBrush="#00FFFFFF" Background="#00FFFFFF" HorizontalAlignment="Center" Grid.Column="6" Grid.Row="10" />
            <Rectangle Fill="#FF0000FF" Grid.Column="{Binding Path=Test8_Val, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            <TextBox Text="{Binding Path=ChartLabel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" BorderBrush="#00FFFFFF" Background="#00FFFFFF" HorizontalAlignment="Center" Grid.Column="7" Grid.Row="10" />
            <Rectangle Fill="#FF0000FF" Grid.Column="{Binding Path=Test9_Val, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            <TextBox Text="{Binding Path=ChartLabel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" BorderBrush="#00FFFFFF" Background="#00FFFFFF" HorizontalAlignment="Center" Grid.Column="8" Grid.Row="10" />
            <Rectangle Fill="#FF0000FF" Grid.Column="{Binding Path=Test10_Val, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            <TextBox Text="{Binding Path=ChartLabel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" BorderBrush="#00FFFFFF" Background="#00FFFFFF" HorizontalAlignment="Center" Grid.Column="9" Grid.Row="10" />
   </Grid>

1 Ответ

0 голосов
/ 01 декабря 2018

Я не уверен, что следую вашему описанию, с какой частью у вас возникли проблемы.У вас будет список.Вы хотите использовать строку из этого в качестве метки и число в качестве высоты.Если вы итерируете это, вы можете найти максимум и, следовательно, рассчитать некоторый коэффициент масштабирования, так что значение, равное половине максимума, в итоге будет составлять примерно половину высоты вашего графика.Я бы сделал серию, подобную этой, с помощью itemcontrol.Свяжите наблюдаемую коллекцию с источником предметов.Элемент управления контентом имеет панель стека, в которую входит его содержимое. Установите горизонтальную ориентацию и определите шаблон элемента.Это будет текстовый блок для метки (возможно, повернутый) и прямоугольник, высота которого привязана к вашему масштабированному значению.

Примерно так работает визуализатор ландшафта, который я написал.Там нет ярлыков - так что это дать вам идею, а не вырезать и вставить.enter image description here

    <ListBox ItemsSource="{Binding TerrainPointList}"
             ..
             >
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel IsItemsHost="True" 
                                        Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>

...

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

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