在运行时将数据绑定到XAML

时间:2018-12-01 12:38:01

标签: c# wpf xaml charts binding

我用一个网格和一些矩形构建一个图表,就像这篇文章: Drawing a chart in WPF C# design questions

现在,我将此图表保存到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 :(得分:0)

我不确定我是否遵循您对哪个部分有问题的描述。 您将有一个列表。 您要使用该字符串作为标签,并使用数字作为高度。 如果进行迭代,则可以找到最大值,从而计算某种比例因子,因此,最大值的一半最终将占图表高度的一半。 我要做这样的系列的方式是使用itemscontrol。将可观察的集合绑定到itemssource。一个项目控件有一个堆栈面板,其内容进入其中。使方向水平,并定义一个项目模板。那将有一个用于标签的文本块(可以旋转)和一个矩形,其高度与缩放值绑定。

我写的地形可视化工具大致是这样工作的。 没有标签-因此,这是给您的想法,而不是剪切和粘贴。 enter image description here

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

...                                                                                                                                        

一个列表框包含滚动条和selecteditem。我在我的产品中使用了selecteditem,这对您可能有用也可能没有用。