Skip to content

Commit ad376b3

Browse files
committed
[Editor] Use new null conditional syntax in xaml binding
This reduces the number of binding errors.
1 parent 9a005f6 commit ad376b3

File tree

4 files changed

+22
-23
lines changed

4 files changed

+22
-23
lines changed

sources/editor/Stride.Core.Assets.Editor.Avalonia/Views/DefaultPropertyTemplateProviders.axaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@
239239
</TextBox>
240240
<CheckBox Grid.Column="3"
241241
Margin="2,0" HorizontalAlignment="Left" VerticalAlignment="Center"
242-
IsChecked="{ReflectionBinding [Enabled].NodeValue, Converter={caec:DifferentValuesToParam}, ConverterParameter={x:Null}, FallbackValue={x:False}, TargetNullValue={x:False}}"
243-
IsThreeState="{ReflectionBinding [Enabled].NodeValue, Converter={sd:IsEqualToParam}, ConverterParameter={x:Static cpqvm:NodeViewModel.DifferentValues}, FallbackValue={x:False}, TargetNullValue={x:False}}"
242+
IsChecked="{ReflectionBinding [Enabled]?.NodeValue, Converter={caec:DifferentValuesToParam}, ConverterParameter={x:Null}, TargetNullValue={x:False}}"
243+
IsThreeState="{ReflectionBinding [Enabled]?.NodeValue, Converter={sd:IsEqualToParam}, ConverterParameter={x:Static cpqvm:NodeViewModel.DifferentValues}, TargetNullValue={x:False}}"
244244
IsVisible="{Binding [HasChild_Enabled], FallbackValue={x:False}}"/>
245245
<Interaction.Behaviors>
246246
<DataTriggerBehavior Binding="{sd:MultiBinding {Binding ConverterParameter=[IsOverridden], Converter={caec:NodePathToObject}},
@@ -309,8 +309,8 @@
309309
<StackPanel Orientation="Horizontal" Margin="8,0,0,0">
310310
<CheckBox Margin="4,0" VerticalAlignment="Center"
311311
IsVisible="{Binding [HasChild_Enabled]}"
312-
IsChecked="{ReflectionBinding [Enabled].NodeValue, Converter={caec:DifferentValuesToParam}, ConverterParameter={x:Null}, FallbackValue={x:False}, TargetNullValue={x:False}}"
313-
IsThreeState="{ReflectionBinding [Enabled].NodeValue, Converter={sd:IsEqualToParam}, ConverterParameter={x:Static cpqvm:NodeViewModel.DifferentValues}, FallbackValue={x:False}, TargetNullValue={x:False}}"/>
312+
IsChecked="{ReflectionBinding [Enabled]?.NodeValue, Converter={caec:DifferentValuesToParam}, ConverterParameter={x:Null}, TargetNullValue={x:False}}"
313+
IsThreeState="{ReflectionBinding [Enabled]?.NodeValue, Converter={sd:IsEqualToParam}, ConverterParameter={x:Static cpqvm:NodeViewModel.DifferentValues}, TargetNullValue={x:False}}"/>
314314
<Image Source="{Binding NodeValue, Converter={sd:Chained {sd:ObjectToType}, {caec:TypeToResource}}}"
315315
MaxWidth="16" MaxHeight="16" Margin="0,0,4,0"/>
316316
<TextBlock x:Name="HeaderTextBlock" FontSize="16" TextTrimming="CharacterEllipsis"
@@ -1435,7 +1435,7 @@
14351435
<Image x:Name="ThumbnailImage"
14361436
Width="64" Height="64"
14371437
DataContext="{Binding ((capvm:AssetViewModel)NodeValue), Converter={caec:ContentReferenceToAsset}}"
1438-
Source="{Binding ThumbnailData.Presenter, Mode=OneWay}"/>
1438+
Source="{Binding ThumbnailData?.Presenter, Mode=OneWay}"/>
14391439
<Interaction.Behaviors>
14401440
<!-- FIXME only on pointer down -->
14411441
<EventTriggerBehavior EventName="PointerPressed" >

sources/editor/Stride.GameStudio.Avalonia/Views/AssetExplorerView.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
</Interaction.Behaviors>
3232
<TextBlock Text="Asset: " />
3333
<TextBlock Text="{Binding Name}" />
34-
<Image Source="{Binding ThumbnailData.Presenter, Converter={gscv:StrideImage}, FallbackValue={x:Static AvaloniaProperty.UnsetValue}}"
34+
<Image Source="{Binding ThumbnailData?.Presenter, Converter={gscv:StrideImage}}"
3535
Width="64" Height="64"/>
3636
</StackPanel>
3737
</DataTemplate>

sources/editor/Stride.GameStudio.Avalonia/Views/MainView.axaml

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@
4545
<!-- Edit menu -->
4646
<MenuItem Header="{sd:LocalizeString Edit, Context=Menu}">
4747
<MenuItem Header="{sd:LocalizeString Undo, Context=Menu}"
48-
Command="{Binding Session.ActionHistory.UndoCommand, FallbackValue={x:Static cpc:DisabledCommand.Instance}}"
48+
Command="{Binding Session?.ActionHistory?.UndoCommand, TargetNullValue={x:Static cpc:DisabledCommand.Instance}}"
4949
HotKey="{x:Static gsvw:MainView.UndoGesture}" InputGesture="{Binding $self.HotKey, Mode=OneTime}"/>
5050
<MenuItem Header="{sd:LocalizeString Redo, Context=Menu}"
51-
Command="{Binding Session.ActionHistory.RedoCommand, FallbackValue={x:Static cpc:DisabledCommand.Instance}}"
51+
Command="{Binding Session?.ActionHistory?.RedoCommand, TargetNullValue={x:Static cpc:DisabledCommand.Instance}}"
5252
HotKey="{x:Static gsvw:MainView.RedoGesture}" InputGesture="{Binding $self.HotKey, Mode=OneTime}"/>
5353
</MenuItem>
5454
<!-- Help menu -->
@@ -88,25 +88,25 @@
8888
BorderThickness="2"
8989
BorderBrush="Red"
9090
Padding="2"
91-
DataContext="{Binding Session.EditorCollection}"/>
91+
DataContext="{Binding Session?.EditorCollection}"/>
9292
<GridSplitter Grid.Column="1" ResizeDirection="Auto"/>
9393
<Grid Grid.Column="2"
9494
RowDefinitions="Auto, *">
9595
<StackPanel Grid.Row="0"
9696
Orientation="Horizontal">
9797
<Button Content="{sd:LocalizeString Previous, Context=Button}"
98-
Command="{Binding Session.PreviousSelectionCommand, FallbackValue={x:Static cpc:DisabledCommand.Instance}}"
98+
Command="{Binding Session?.PreviousSelectionCommand, TargetNullValue={x:Static cpc:DisabledCommand.Instance}}"
9999
HotKey="Alt+Left" ToolTip.Tip="{Binding $self.HotKey, Mode=OneTime}"/>
100100
<Button Content="{sd:LocalizeString Next, Context=Button}"
101-
Command="{Binding Session.NextSelectionCommand, FallbackValue={x:Static cpc:DisabledCommand.Instance}}"
101+
Command="{Binding Session?.NextSelectionCommand, TargetNullValue={x:Static cpc:DisabledCommand.Instance}}"
102102
HotKey="Alt+Right" ToolTip.Tip="{Binding $self.HotKey, Mode=OneTime}"/>
103103
</StackPanel>
104104
<!-- Property Grid -->
105105
<gsvw:PropertyGridView Grid.Row="1"
106106
BorderThickness="2"
107107
BorderBrush="Orange"
108108
Padding="2"
109-
DataContext="{Binding Session.ActiveProperties, FallbackValue={x:Null}}"/>
109+
DataContext="{Binding Session?.ActiveProperties}"/>
110110
</Grid>
111111
</Grid>
112112
<GridSplitter Grid.Row="1" ResizeDirection="Auto"/>
@@ -125,10 +125,10 @@
125125
<gsvw:AssetExplorerView BorderThickness="2"
126126
BorderBrush="Blue"
127127
Padding="2"
128-
DataContext="{Binding Session.AssetCollection, FallbackValue={x:Null}}"/>
128+
DataContext="{Binding Session?.AssetCollection}"/>
129129
</TabItem>
130130
<TabItem Header="Asset errors">
131-
<caec:TextLogViewer LogMessages="{Binding Session.AssetLog.FilteredMessages, FallbackValue={x:Null}}"/>
131+
<caec:TextLogViewer LogMessages="{Binding Session?.AssetLog.FilteredMessages}"/>
132132
</TabItem>
133133
<TabItem Header="Output">
134134

@@ -143,7 +143,7 @@
143143
Padding="2"/>
144144
</TabItem>
145145
<TabItem Header="Edit history">
146-
<ListBox ItemsSource="{Binding Session.ActionHistory.Transactions, FallbackValue={x:Null}}"
146+
<ListBox ItemsSource="{Binding Session?.ActionHistory?.Transactions}"
147147
HorizontalAlignment="Stretch">
148148
<ListBox.ItemTemplate>
149149
<DataTemplate DataType="caect:TransactionViewModel">
@@ -182,8 +182,8 @@
182182
<TextBlock Grid.Column="2"
183183
Margin="8,0"
184184
VerticalAlignment="Center">
185-
<Run Text="{Binding Session.AssetCollection.SelectedContent.Count, Mode=OneWay, Converter={sd:Localize Text={}{0} item, Plural={}{0} items, IsStringFormat=True, Context=StatusBar}, FallbackValue={x:Null}}"/>
186-
<Run Text="{Binding Session.AssetCollection.SelectedContent.Count, Mode=OneWay, Converter={sd:Localize Text=({0} selected), Plural=({0} selected), IsStringFormat=True, Context=StatusBar}, FallbackValue={x:Null}}"/>
185+
<Run Text="{Binding Session?.AssetCollection.SelectedContent.Count, Mode=OneWay, Converter={sd:Localize Text={}{0} item, Plural={}{0} items, IsStringFormat=True, Context=StatusBar}}"/>
186+
<Run Text="{Binding Session?.AssetCollection.SelectedContent.Count, Mode=OneWay, Converter={sd:Localize Text=({0} selected), Plural=({0} selected), IsStringFormat=True, Context=StatusBar}}"/>
187187
</TextBlock>
188188
<Border Grid.Column="3"
189189
Margin="2"
@@ -193,16 +193,15 @@
193193
Margin="8,0"
194194
HorizontalAlignment="Right"
195195
VerticalAlignment="Center"
196-
Text="{Binding Status.CurrentJob.Message, FallbackValue={x:Null}}"/>
196+
Text="{Binding Status.CurrentJob?.Message}"/>
197197
<ProgressBar Grid.Column="5"
198198
IsVisible="{Binding Status.CurrentJob, Converter={sd:ObjectToBool}}"
199199
Margin="0,2"
200200
VerticalAlignment="Stretch"
201201
HorizontalAlignment="Left"
202-
IsIndeterminate="{Binding Status.CurrentJob.IsIndeterminate, FallbackValue={x:Null}}"
203-
Maximum="{Binding Status.CurrentJob.Total, FallbackValue={x:Null}}"
204-
Value="{Binding Status.CurrentJob.Current, FallbackValue={x:Null}}"/>
202+
IsIndeterminate="{Binding Status.CurrentJob?.IsIndeterminate, TargetNullValue={sd:True}}"
203+
Maximum="{Binding Status.CurrentJob?.Total, TargetNullValue={sd:Double 0}}"
204+
Value="{Binding Status.CurrentJob?.Current, TargetNullValue={sd:Double 0}}"/>
205205
</Grid>
206206
</Grid>
207-
208207
</UserControl>

sources/editor/Stride.GameStudio.Avalonia/Views/PropertyGridView.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@
105105
</UserControl.Styles>
106106
<DockPanel LastChildFill="True">
107107
<TextBlock DockPanel.Dock="Top" Text="Property Grid"/>
108-
<sd:PropertyView ItemsSource="{Binding ViewModel.RootNode.Children}"
108+
<sd:PropertyView ItemsSource="{Binding ViewModel?.RootNode.Children}"
109109
IsVisible="{Binding CanDisplayProperties}">
110110
<Interaction.Behaviors>
111111
<caeb:PropertyViewAutoExpandNodesBehavior ViewModel="{Binding ViewModel, Mode=OneWay}" />

0 commit comments

Comments
 (0)