Re-implement variable/function item buttons using ElementName root binding\n\n- Add x:Name=Root on UserControl.\n- In item templates, bind Command to Root.DataContext.*Command.\n- Bind CommandParameter directly to item properties (VariableName/FunctionName).\n- Remove Tag/DataContext hacks and restore typed DataTemplates.
This commit is contained in:
parent
f262c10e4e
commit
fb2bc5e0cd
1 changed files with 8 additions and 13 deletions
|
@ -7,7 +7,8 @@
|
|||
xmlns:conv="clr-namespace:AdvancedCalculator.Converters"
|
||||
mc:Ignorable="d" d:DesignWidth="900" d:DesignHeight="600"
|
||||
x:Class="AdvancedCalculator.Views.MainView"
|
||||
x:DataType="vm:MainViewModel">
|
||||
x:DataType="vm:MainViewModel"
|
||||
x:Name="Root">
|
||||
<UserControl.Resources>
|
||||
<conv:BoolToGridLengthConverter x:Key="BoolToGridLengthConverter" />
|
||||
<conv:WidthToBooleanConverter x:Key="WidthToBooleanConverter" />
|
||||
|
@ -35,15 +36,12 @@
|
|||
<ListBox ItemsSource="{Binding Variables}" SelectedIndex="-1"
|
||||
AutomationProperties.Name="Variables list">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<DataTemplate x:DataType="m:VariableItem">
|
||||
<Button Background="Transparent" BorderThickness="0" Padding="8" MinHeight="44"
|
||||
AutomationProperties.Name="Insert variable"
|
||||
Tag="{Binding}"
|
||||
DataContext="{Binding $parent[UserControl].DataContext}"
|
||||
Command="{Binding InsertVariableCommand}"
|
||||
CommandParameter="{Binding Tag.VariableName, RelativeSource={RelativeSource Self}}">
|
||||
Command="{Binding DataContext.InsertVariableCommand, ElementName=Root}"
|
||||
CommandParameter="{Binding VariableName}">
|
||||
<Grid ColumnDefinitions="Auto,*,Auto"
|
||||
DataContext="{Binding Tag, RelativeSource={RelativeSource AncestorType=Button}}"
|
||||
x:DataType="m:VariableItem">
|
||||
<TextBlock Grid.Column="0" FontFamily="{StaticResource MDI}"
|
||||
FontSize="{DynamicResource IconSizeM}" Text="{Binding Icon}" VerticalAlignment="Center" Margin="0,0,8,0" />
|
||||
|
@ -69,15 +67,12 @@
|
|||
ItemsSource="{x:Static m:FunctionDefinitionItem.DefinedFunctions}"
|
||||
AutomationProperties.Name="Functions list">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<DataTemplate x:DataType="m:FunctionDefinitionItem">
|
||||
<Button Background="Transparent" BorderThickness="0" Padding="8" MinHeight="44"
|
||||
AutomationProperties.Name="Insert function"
|
||||
Tag="{Binding}"
|
||||
DataContext="{Binding $parent[UserControl].DataContext}"
|
||||
Command="{Binding InsertFunctionCommand}"
|
||||
CommandParameter="{Binding Tag.FunctionName, RelativeSource={RelativeSource Self}}">
|
||||
Command="{Binding DataContext.InsertFunctionCommand, ElementName=Root}"
|
||||
CommandParameter="{Binding FunctionName}">
|
||||
<StackPanel Spacing="8"
|
||||
DataContext="{Binding Tag, RelativeSource={RelativeSource AncestorType=Button}}"
|
||||
x:DataType="m:FunctionDefinitionItem">
|
||||
<StackPanel Orientation="Horizontal" Spacing="8" VerticalAlignment="Center">
|
||||
<TextBlock FontFamily="{StaticResource MDI}" Text="{Binding Icon}" />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue