Dictionary StaticResource do banco de dados para TreeMap do WPF Toolkit
-
26-09-2019 - |
Pergunta
Estou tentando ligar alguns diagramas a um dicionário de string, int, e estou usando um padrão de viewmodel.
Já vi o dicionário a um diagrama de barra, mas agora gostaria de prendê-lo ao controle Treemap do WPF Toolkit. Não está realmente documentado em nenhum lugar online, exceto aqui para Silverlight: http://blogs.msdn.com/marlat/archive/2009/07/10/treemap-control-comes-to-silverlight-toolkit.aspx
Alguém pode me ajudar a consertar a ligação certa ao meu controle?
<DataVisualization:TreeMap x:Name="treeMapControl">
<DataVisualization:TreeMap.Interpolators>
<DataVisualization:SolidColorBrushInterpolator TargetName="itemBorder" TargetProperty="Background"
DataRangeBinding="{Binding Source={StaticResource ShellVM},Path=CustodianEmailCount.Value}" From="Blue" To="Magenta" />
<DataVisualization:DoubleInterpolator TargetName="textBlk" TargetProperty="FontSize"
DataRangeBinding="{Binding Source={StaticResource ShellVM},Path=CustodianEmailCount.Value}" From="8" To="15" />
</DataVisualization:TreeMap.Interpolators>
<DataVisualization:TreeMap.ItemDefinition>
<DataVisualization:TreeMapItemDefinition ItemsSource="{Binding Source={StaticResource ShellVM},Path=CustodianEmailCount.Key}" ValueBinding="{Binding Source={StaticResource ShellVM},Path=CustodianEmailCount.Value}" ChildItemPadding="1">
<DataTemplate>
<Border x:Name="itemBorder" BorderBrush="Black" BorderThickness="1" ToolTipService.ToolTip="{Binding ToolTip}">
<TextBlock x:Name="textBlk" Foreground="White" Text="{Binding Source={StaticResource ShellVM},Path=CustodianEmailCount.Key}" VerticalAlignment="Center" Margin="2,2,0,0"
TextWrapping="Wrap" TextAlignment="Center"/>
</Border>
</DataTemplate>
</DataVisualization:TreeMapItemDefinition>
</DataVisualization:TreeMap.ItemDefinition>
</DataVisualization:TreeMap>
Solução
O problema é que você continua chamando "fonte de ligação = {staticResource shellvm}" em todos os itens que podem causar (depende da sua implementação). De qualquer forma, não é realmente a maneira correta de usá -lo durante a implementação do MVVM. A maneira certa de fazê -lo é definir o contêiner do pai (até da visão completa, se você estiver implementando MVVM) DataContext, o que resulta em sua folha para indicar a VM:
DataContext={Binding Source={StaticResource ShellVM}
E então, por exemplo:
Text = {Binding CustodianEmailCount.Key}