Skip to content

Commit 46ab187

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

File tree

5 files changed

+25
-26
lines changed

5 files changed

+25
-26
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/Controls/DebugAssetNodesUserControl.axaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<DockPanel>
3333
<Button DockPanel.Dock="Right" Command="{Binding BreakCommand}" Theme="{StaticResource BreakButonTheme}"/>
3434
<TextBlock x:Name="TextBlock">
35-
[<Run Text="{Binding AssetType.Name, Mode=OneWay}"/>]
35+
[<Run Text="{Binding AssetType?.Name, Mode=OneWay}"/>]
3636
<Run Text="{Binding AssetName, Mode=OneWay}" FontWeight="Bold" Foreground="Gold"/>
3737
</TextBlock>
3838
</DockPanel>
@@ -46,7 +46,7 @@
4646
<Run Text="Base:" FontWeight="Bold" Foreground="Orchid"/>
4747
<Run Text="{Binding Name, Mode=OneWay}" FontWeight="Bold" Foreground="Gold"/>
4848
= <Run Text="{Binding Value, Mode=OneWay}" FontWeight="Bold" Foreground="PowderBlue"/>
49-
from <Run Text="{Binding Asset.Url, Mode=OneWay}"/>
49+
from <Run Text="{Binding Asset?.Url, Mode=OneWay}"/>
5050
</TextBlock>
5151
</DockPanel>
5252
</DataTemplate>
@@ -60,7 +60,7 @@
6060
<Run Text="{Binding ItemId, StringFormat=[{0}], Mode=OneWay}" x:Name="ItemIdRun" Foreground="LightCyan"/>
6161
<Run Text="{Binding Name, Mode=OneWay}" FontWeight="Bold" Foreground="Gold"/>
6262
= <Run Text="{Binding Value, Mode=OneWay}" FontWeight="Bold" Foreground="PowderBlue"/>
63-
<Run Text="{Binding Type.Name, StringFormat=({0}), Mode=OneWay}"/>
63+
<Run Text="{Binding Type?.Name, StringFormat=({0}), Mode=OneWay}"/>
6464
</TextBlock>
6565
<Button DockPanel.Dock="Right" Command="{Binding BreakCommand}" Theme="{StaticResource BreakButonTheme}"/>
6666
<ContentControl Content="{Binding Base}"/>

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
@@ -47,10 +47,10 @@
4747
<!-- Edit menu -->
4848
<MenuItem Header="{sd:LocalizeString Edit, Context=Menu}">
4949
<MenuItem Header="{sd:LocalizeString Undo, Context=Menu}"
50-
Command="{Binding Session.ActionHistory.UndoCommand, FallbackValue={x:Static cpc:DisabledCommand.Instance}}"
50+
Command="{Binding Session?.ActionHistory?.UndoCommand, TargetNullValue={x:Static cpc:DisabledCommand.Instance}}"
5151
HotKey="{x:Static gsvw:MainView.UndoGesture}" InputGesture="{Binding $self.HotKey, Mode=OneTime}"/>
5252
<MenuItem Header="{sd:LocalizeString Redo, Context=Menu}"
53-
Command="{Binding Session.ActionHistory.RedoCommand, FallbackValue={x:Static cpc:DisabledCommand.Instance}}"
53+
Command="{Binding Session?.ActionHistory?.RedoCommand, TargetNullValue={x:Static cpc:DisabledCommand.Instance}}"
5454
HotKey="{x:Static gsvw:MainView.RedoGesture}" InputGesture="{Binding $self.HotKey, Mode=OneTime}"/>
5555
</MenuItem>
5656
<!-- Help menu -->
@@ -91,25 +91,25 @@
9191
BorderThickness="2"
9292
BorderBrush="Red"
9393
Padding="2"
94-
DataContext="{Binding Session.EditorCollection}"/>
94+
DataContext="{Binding Session?.EditorCollection}"/>
9595
<GridSplitter Grid.Column="1" ResizeDirection="Auto"/>
9696
<Grid Grid.Column="2"
9797
RowDefinitions="Auto, *">
9898
<StackPanel Grid.Row="0"
9999
Orientation="Horizontal">
100100
<Button Content="{sd:LocalizeString Previous, Context=Button}"
101-
Command="{Binding Session.PreviousSelectionCommand, FallbackValue={x:Static cpc:DisabledCommand.Instance}}"
101+
Command="{Binding Session?.PreviousSelectionCommand, TargetNullValue={x:Static cpc:DisabledCommand.Instance}}"
102102
HotKey="Alt+Left" ToolTip.Tip="{Binding $self.HotKey, Mode=OneTime}"/>
103103
<Button Content="{sd:LocalizeString Next, Context=Button}"
104-
Command="{Binding Session.NextSelectionCommand, FallbackValue={x:Static cpc:DisabledCommand.Instance}}"
104+
Command="{Binding Session?.NextSelectionCommand, TargetNullValue={x:Static cpc:DisabledCommand.Instance}}"
105105
HotKey="Alt+Right" ToolTip.Tip="{Binding $self.HotKey, Mode=OneTime}"/>
106106
</StackPanel>
107107
<!-- Property Grid -->
108108
<gsvw:PropertyGridView Grid.Row="1"
109109
BorderThickness="2"
110110
BorderBrush="Orange"
111111
Padding="2"
112-
DataContext="{Binding Session.ActiveProperties, FallbackValue={x:Null}}"/>
112+
DataContext="{Binding Session?.ActiveProperties}"/>
113113
</Grid>
114114
</Grid>
115115
<GridSplitter Grid.Row="1" ResizeDirection="Auto"/>
@@ -128,10 +128,10 @@
128128
<gsvw:AssetExplorerView BorderThickness="2"
129129
BorderBrush="Blue"
130130
Padding="2"
131-
DataContext="{Binding Session.AssetCollection, FallbackValue={x:Null}}"/>
131+
DataContext="{Binding Session?.AssetCollection}"/>
132132
</TabItem>
133133
<TabItem Header="Asset errors">
134-
<sd:TextLogViewer LogMessages="{Binding Session.AssetLog.FilteredMessages, FallbackValue={x:Null}}"
134+
<sd:TextLogViewer LogMessages="{Binding Session?.AssetLog.FilteredMessages}"
135135
ShowDebugMessages="False" ShowVerboseMessages="False" ShowInfoMessages="False"/>
136136
</TabItem>
137137
<TabItem Header="Output">
@@ -147,7 +147,7 @@
147147
Padding="2"/>
148148
</TabItem>
149149
<TabItem Header="Edit history">
150-
<ListBox ItemsSource="{Binding Session.ActionHistory.Transactions, FallbackValue={x:Null}}"
150+
<ListBox ItemsSource="{Binding Session?.ActionHistory?.Transactions}"
151151
HorizontalAlignment="Stretch">
152152
<ListBox.ItemTemplate>
153153
<DataTemplate DataType="caect:TransactionViewModel">
@@ -224,8 +224,8 @@
224224
<TextBlock Grid.Column="2"
225225
Margin="8,0"
226226
VerticalAlignment="Center">
227-
<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}}"/>
228-
<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}}"/>
227+
<Run Text="{Binding Session?.AssetCollection.SelectedContent.Count, Mode=OneWay, Converter={sd:Localize Text={}{0} item, Plural={}{0} items, IsStringFormat=True, Context=StatusBar}}"/>
228+
<Run Text="{Binding Session?.AssetCollection.SelectedContent.Count, Mode=OneWay, Converter={sd:Localize Text=({0} selected), Plural=({0} selected), IsStringFormat=True, Context=StatusBar}}"/>
229229
</TextBlock>
230230
<Border Grid.Column="3"
231231
Margin="2"
@@ -235,16 +235,15 @@
235235
Margin="8,0"
236236
HorizontalAlignment="Right"
237237
VerticalAlignment="Center"
238-
Text="{Binding Status.CurrentJob.Message, FallbackValue={x:Null}}"/>
238+
Text="{Binding Status.CurrentJob?.Message}"/>
239239
<ProgressBar Grid.Column="5"
240240
IsVisible="{Binding Status.CurrentJob, Converter={sd:ObjectToBool}}"
241241
Margin="0,2"
242242
VerticalAlignment="Stretch"
243243
HorizontalAlignment="Left"
244-
IsIndeterminate="{Binding Status.CurrentJob.IsIndeterminate, FallbackValue={x:Null}}"
245-
Maximum="{Binding Status.CurrentJob.Total, FallbackValue={x:Null}}"
246-
Value="{Binding Status.CurrentJob.Current, FallbackValue={x:Null}}"/>
244+
IsIndeterminate="{Binding Status.CurrentJob?.IsIndeterminate, TargetNullValue={sd:True}}"
245+
Maximum="{Binding Status.CurrentJob?.Total, TargetNullValue={sd:Double 0}}"
246+
Value="{Binding Status.CurrentJob?.Current, TargetNullValue={sd:Double 0}}"/>
247247
</Grid>
248248
</Grid>
249-
250249
</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)