MainWindow.xaml 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <Window xmlns="https://github.com/avaloniaui"
  2. xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
  3. x:Class="BindingDemo.MainWindow"
  4. xmlns:vm="using:BindingDemo.ViewModels"
  5. xmlns:local="using:BindingDemo"
  6. xmlns:system="clr-namespace:System;assembly=System.Runtime"
  7. Title="AvaloniaUI Bindings Test"
  8. Width="800"
  9. Height="600"
  10. x:DataType="vm:MainWindowViewModel">
  11. <Window.Styles>
  12. <Style Selector="TextBlock.h1">
  13. <Setter Property="FontSize" Value="18"/>
  14. </Style>
  15. </Window.Styles>
  16. <TabControl>
  17. <TabItem Header="Basic">
  18. <StackPanel Orientation="Vertical">
  19. <StackPanel Orientation="Horizontal">
  20. <StackPanel Margin="18" Spacing="4" Width="200">
  21. <TextBlock FontSize="16" Text="Simple Bindings"/>
  22. <TextBox Watermark="Two Way" UseFloatingWatermark="True" Text="{Binding Path=StringValue}" Name="first"/>
  23. <TextBox Watermark="Two Way (LostFocus)" UseFloatingWatermark="True" Text="{Binding Path=StringValue, UpdateSourceTrigger=LostFocus}"/>
  24. <TextBox Watermark="One Way" UseFloatingWatermark="True" Text="{Binding Path=StringValue, Mode=OneWay}"/>
  25. <TextBox Watermark="One Time" UseFloatingWatermark="True" Text="{Binding Path=StringValue, Mode=OneTime}"/>
  26. <!-- Removed due to #2983: reinstate when that's fixed.
  27. <TextBox Watermark="One Way to Source" UseFloatingWatermark="True" Text="{Binding Path=StringValue, Mode=OneWayToSource}"/>
  28. -->
  29. </StackPanel>
  30. <StackPanel Margin="18" Spacing="4" Width="200">
  31. <TextBlock FontSize="16" Text="Collection Bindings"/>
  32. <TextBox Watermark="Items[1].Value" UseFloatingWatermark="True" Text="{Binding Path=Items[1].Value}"/>
  33. <Button Command="{Binding ShuffleItems}">Shuffle</Button>
  34. </StackPanel>
  35. <StackPanel Margin="18" Spacing="4" Width="200">
  36. <TextBlock FontSize="16" Text="Negated Bindings"/>
  37. <TextBox Watermark="Boolean String" UseFloatingWatermark="True" Text="{Binding Path=BooleanString}"/>
  38. <CheckBox IsChecked="{Binding !BooleanString}">!BooleanString</CheckBox>
  39. <CheckBox IsChecked="{Binding !!BooleanString}">!!BooleanString</CheckBox>
  40. </StackPanel>
  41. </StackPanel>
  42. <StackPanel Orientation="Horizontal">
  43. <StackPanel Margin="18" Spacing="4" Width="200" HorizontalAlignment="Left">
  44. <TextBlock FontSize="16" Text="Numeric Bindings"/>
  45. <TextBox Watermark="Double" UseFloatingWatermark="True" Text="{Binding Path=DoubleValue, Mode=TwoWay}"/>
  46. <TextBlock Text="{Binding Path=DoubleValue}"/>
  47. <ProgressBar Maximum="10" Value="{Binding DoubleValue}"/>
  48. </StackPanel>
  49. <StackPanel Margin="18" Spacing="4" Width="200" HorizontalAlignment="Left">
  50. <TextBlock FontSize="16" Text="Binding Sources"/>
  51. <TextBox Watermark="Value of first TextBox" UseFloatingWatermark="True"
  52. Text="{Binding #first.Text, Mode=TwoWay}"/>
  53. <TextBox Watermark="Value of SharedItem.StringValue" UseFloatingWatermark="True"
  54. Text="{Binding Value, Source={StaticResource SharedItem}, Mode=TwoWay, DataType={x:Type vm:MainWindowViewModel+TestItem, x:TypeArguments=x:String}}"/>
  55. <TextBox Watermark="Value of SharedItem.StringValue (duplicate)" UseFloatingWatermark="True"
  56. Text="{Binding Value, Source={StaticResource SharedItem}, Mode=TwoWay, DataType={x:Type vm:MainWindowViewModel+TestItem, x:TypeArguments=x:String}}"/>
  57. </StackPanel>
  58. <StackPanel Margin="18" Spacing="4" Width="200" HorizontalAlignment="Left">
  59. <TextBlock FontSize="16" Text="Scheduler"/>
  60. <TextBox Watermark="Background Thread" Text="{Binding CurrentTime, Mode=OneWay}"/>
  61. <TextBlock FontSize="16" Text="Stream Operator"/>
  62. <TextBox Watermark="StreamOperator" Text="{CompiledBinding CurrentTimeObservable^, Mode=OneWay}"/>
  63. </StackPanel>
  64. </StackPanel>
  65. </StackPanel>
  66. </TabItem>
  67. <TabItem Header="ListBox">
  68. <StackPanel Orientation="Horizontal">
  69. <StackPanel.DataTemplates>
  70. <DataTemplate x:DataType="{x:Type vm:MainWindowViewModel+TestItem, x:TypeArguments=x:String}">
  71. <TextBlock Text="{Binding Value}"/>
  72. </DataTemplate>
  73. </StackPanel.DataTemplates>
  74. <StackPanel Margin="18" Spacing="4" Width="200">
  75. <TextBlock FontSize="16" Text="Multiple"/>
  76. <ListBox ItemsSource="{Binding Items}" SelectionMode="Multiple" Selection="{Binding Selection}"/>
  77. </StackPanel>
  78. <StackPanel Margin="18" Spacing="4" Width="200">
  79. <TextBlock FontSize="16" Text="Multiple"/>
  80. <ListBox ItemsSource="{Binding Items}" SelectionMode="Multiple" Selection="{Binding Selection}"/>
  81. </StackPanel>
  82. <ContentControl Content="{ReflectionBinding Selection.SelectedItems[0]}">
  83. <ContentControl.DataTemplates>
  84. <DataTemplate x:DataType="{x:Type vm:MainWindowViewModel+TestItem, x:TypeArguments=x:String}">
  85. <local:TestItemView></local:TestItemView>
  86. </DataTemplate>
  87. </ContentControl.DataTemplates>
  88. </ContentControl>
  89. </StackPanel>
  90. </TabItem>
  91. <TabItem Header="Property Validation">
  92. <StackPanel Orientation="Horizontal">
  93. <StackPanel Margin="18" Spacing="4" MinWidth="200" DataContext="{Binding ExceptionDataValidation}">
  94. <TextBlock FontSize="16" Text="Exception Validation"/>
  95. <TextBox Watermark="Less Than 10" UseFloatingWatermark="True" Text="{Binding Path=LessThan10}"/>
  96. </StackPanel>
  97. <StackPanel Margin="18" Spacing="4" MinWidth="200" DataContext="{Binding IndeiDataValidation}">
  98. <TextBlock FontSize="16" Text="INotifyDataErrorInfo Validation"/>
  99. <TextBox Watermark="Maximum" UseFloatingWatermark="True" Text="{Binding Path=Maximum}"/>
  100. <TextBox Watermark="Value" UseFloatingWatermark="True" Text="{Binding Path=Value}"/>
  101. </StackPanel>
  102. <StackPanel Margin="18" Spacing="4" MinWidth="200" DataContext="{Binding DataAnnotationsValidation}">
  103. <TextBlock FontSize="16" Text="Data Annotations Validation"/>
  104. <TextBox Watermark="Phone #" UseFloatingWatermark="True" Text="{Binding PhoneNumber}"/>
  105. <TextBox Watermark="Less Than 10" UseFloatingWatermark="True" Text="{Binding Path=LessThan10}"/>
  106. </StackPanel>
  107. </StackPanel>
  108. </TabItem>
  109. <TabItem Header="Commands">
  110. <StackPanel Margin="18" Spacing="4" Width="200">
  111. <Button Content="Button" Command="{Binding StringValueCommand}" CommandParameter="Button"/>
  112. <ToggleButton Content="ToggleButton" IsChecked="{Binding BooleanFlag, Mode=OneWay}" Command="{Binding StringValueCommand}" CommandParameter="ToggleButton"/>
  113. <CheckBox Content="CheckBox" IsChecked="{Binding !BooleanFlag, Mode=OneWay}" Command="{Binding StringValueCommand}" CommandParameter="CheckBox"/>
  114. <RadioButton Content="Radio Button" IsChecked="{Binding !!BooleanFlag, Mode=OneWay}" Command="{Binding StringValueCommand}" CommandParameter="RadioButton"/>
  115. <TextBox Text="{Binding Path=StringValue}"/>
  116. <Button Content="Nested View Model Button" Name="NestedTest" Command="{Binding NestedModel.Command}" />
  117. <Button Content="Command Method Do" Command="{Binding Do}" x:Name="ToDo"/>
  118. </StackPanel>
  119. </TabItem>
  120. <TabItem Header="Advanced">
  121. <TabItem.Resources>
  122. <local:GenericValueConverter x:Key="BrushConverter" x:TypeArguments="SolidColorBrush"/>
  123. </TabItem.Resources>
  124. <StackPanel>
  125. <!-- Tests for #10856 -->
  126. <TextBlock Text="{local:GenericMarkupExtension Value=Red, x:TypeArguments=Color}"/>
  127. <TextBlock HorizontalAlignment="Left"
  128. Text="{Binding $self.Background, Converter={StaticResource BrushConverter}}">
  129. <TextBlock.Background>
  130. <SolidColorBrush Color="Yellow"/>
  131. </TextBlock.Background>
  132. </TextBlock>
  133. </StackPanel>
  134. </TabItem>
  135. </TabControl>
  136. </Window>