<Window xmlns="https://github.com/avaloniaui"
        xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
        x:Class="BindingDemo.MainWindow"
        xmlns:vm="clr-namespace:BindingDemo.ViewModels" 
        xmlns:local="clr-namespace:BindingDemo"
        Title="AvaloniaUI Bindings Test"
        Width="800"
        Height="600"
        x:DataType="vm:MainWindowViewModel">
  <Window.Styles>
    <Style Selector="TextBlock.h1">
      <Setter Property="FontSize" Value="18"/>
    </Style>
  </Window.Styles>
  <Window.Resources>
    <vm:TestItem x:Key="SharedItem" StringValue="shared" />
  </Window.Resources>
  
  <TabControl>
    <TabItem Header="Basic">
      <StackPanel Orientation="Vertical">
        <StackPanel Orientation="Horizontal">
          <StackPanel Margin="18" Spacing="4" Width="200">
            <TextBlock FontSize="16" Text="Simple Bindings"/>
            <TextBox Watermark="Two Way" UseFloatingWatermark="True" Text="{Binding Path=StringValue}" Name="first"/>
            <TextBox Watermark="One Way" UseFloatingWatermark="True" Text="{Binding Path=StringValue, Mode=OneWay}"/>
            <TextBox Watermark="One Time" UseFloatingWatermark="True" Text="{Binding Path=StringValue, Mode=OneTime}"/>
            <!-- Removed due to #2983: reinstate when that's fixed.
              <TextBox Watermark="One Way to Source" UseFloatingWatermark="True" Text="{Binding Path=StringValue, Mode=OneWayToSource}"/>
            -->
          </StackPanel>
          <StackPanel Margin="18" Spacing="4" Width="200">
            <TextBlock FontSize="16" Text="Collection Bindings"/>
            <TextBox Watermark="Items[1].StringValue" UseFloatingWatermark="True" Text="{Binding Path=Items[1].StringValue}"/>
            <Button Command="{Binding ShuffleItems}">Shuffle</Button>
          </StackPanel>
          <StackPanel Margin="18" Spacing="4" Width="200">
            <TextBlock FontSize="16" Text="Negated Bindings"/>
            <TextBox Watermark="Boolean String" UseFloatingWatermark="True" Text="{Binding Path=BooleanString}"/>
            <CheckBox IsChecked="{Binding !BooleanString}">!BooleanString</CheckBox>
            <CheckBox IsChecked="{Binding !!BooleanString}">!!BooleanString</CheckBox>
          </StackPanel>
        </StackPanel>
        <StackPanel Orientation="Horizontal">
          <StackPanel Margin="18" Spacing="4" Width="200" HorizontalAlignment="Left">
            <TextBlock FontSize="16" Text="Numeric Bindings"/>
            <TextBox Watermark="Double" UseFloatingWatermark="True" Text="{Binding Path=DoubleValue, Mode=TwoWay}"/>
            <TextBlock Text="{Binding Path=DoubleValue}"/>
            <ProgressBar Maximum="10" Value="{Binding DoubleValue}"/>
          </StackPanel>
          <StackPanel Margin="18" Spacing="4" Width="200" HorizontalAlignment="Left">
            <TextBlock FontSize="16" Text="Binding Sources"/>
            <TextBox Watermark="Value of first TextBox" UseFloatingWatermark="True" 
                     Text="{Binding #first.Text, Mode=TwoWay}"/>
            <TextBox Watermark="Value of SharedItem.StringValue" UseFloatingWatermark="True"
                     Text="{Binding StringValue, Source={StaticResource SharedItem}, Mode=TwoWay}"/>
            <TextBox Watermark="Value of SharedItem.StringValue (duplicate)" UseFloatingWatermark="True"
                     Text="{Binding StringValue, Source={StaticResource SharedItem}, Mode=TwoWay}"/>
          </StackPanel>
          <StackPanel Margin="18" Spacing="4" Width="200" HorizontalAlignment="Left">
            <TextBlock FontSize="16" Text="Scheduler"/>
            <TextBox Watermark="Background Thread" Text="{Binding CurrentTime, Mode=OneWay}"/>
            <TextBlock FontSize="16" Text="Stream Operator"/>
            <TextBox Watermark="StreamOperator" Text="{CompiledBinding CurrentTimeObservable^, Mode=OneWay}"/>
          </StackPanel>
        </StackPanel>
      </StackPanel>
    </TabItem>
    <TabItem Header="ListBox">
      <StackPanel Orientation="Horizontal">
        <StackPanel.DataTemplates>
          <DataTemplate DataType="vm:TestItem">
            <TextBlock Text="{Binding StringValue}"/>
          </DataTemplate>
        </StackPanel.DataTemplates>
        <StackPanel Margin="18" Spacing="4" Width="200">
          <TextBlock FontSize="16" Text="Multiple"/>
          <ListBox Items="{Binding Items}" SelectionMode="Multiple" Selection="{Binding Selection}"/>
        </StackPanel>
        <StackPanel Margin="18" Spacing="4" Width="200">
          <TextBlock FontSize="16" Text="Multiple"/>
          <ListBox Items="{Binding Items}" SelectionMode="Multiple" Selection="{Binding Selection}"/>
        </StackPanel>
        <ContentControl Content="{Binding SelectedItems[0]}">
          <ContentControl.DataTemplates>
            <DataTemplate DataType="vm:TestItem">
              <local:TestItemView></local:TestItemView>
            </DataTemplate>
          </ContentControl.DataTemplates>
        </ContentControl>
      </StackPanel>
    </TabItem>
    <TabItem Header="Property Validation">
      <StackPanel Orientation="Horizontal">
        <StackPanel Margin="18" Spacing="4" MinWidth="200" DataContext="{Binding ExceptionDataValidation}">
          <TextBlock FontSize="16" Text="Exception Validation"/>
          <TextBox Watermark="Less Than 10" UseFloatingWatermark="True" Text="{Binding Path=LessThan10}"/>
        </StackPanel>
        <StackPanel Margin="18" Spacing="4" MinWidth="200" DataContext="{Binding IndeiDataValidation}">
          <TextBlock FontSize="16" Text="INotifyDataErrorInfo Validation"/>
          <TextBox Watermark="Maximum" UseFloatingWatermark="True" Text="{Binding Path=Maximum}"/>
          <TextBox Watermark="Value" UseFloatingWatermark="True" Text="{Binding Path=Value}"/>
        </StackPanel>
        <StackPanel Margin="18" Spacing="4" MinWidth="200" DataContext="{Binding DataAnnotationsValidation}">
          <TextBlock FontSize="16" Text="Data Annotations Validation"/>
          <TextBox Watermark="Phone #" UseFloatingWatermark="True" Text="{Binding PhoneNumber}"/>
          <TextBox Watermark="Less Than 10" UseFloatingWatermark="True" Text="{Binding Path=LessThan10}"/>
        </StackPanel>
      </StackPanel>
    </TabItem>
    <TabItem Header="Commands">
      <StackPanel Margin="18" Spacing="4" Width="200">
        <Button Content="Button" Command="{Binding StringValueCommand}" CommandParameter="Button"/>
        <ToggleButton Content="ToggleButton" IsChecked="{Binding BooleanFlag, Mode=OneWay}" Command="{Binding StringValueCommand}" CommandParameter="ToggleButton"/>
        <CheckBox Content="CheckBox" IsChecked="{Binding !BooleanFlag, Mode=OneWay}" Command="{Binding StringValueCommand}" CommandParameter="CheckBox"/>
        <RadioButton Content="Radio Button" IsChecked="{Binding !!BooleanFlag, Mode=OneWay}" Command="{Binding StringValueCommand}" CommandParameter="RadioButton"/>
        <TextBox Text="{Binding Path=StringValue}"/>
        <Button Content="Nested View Model Button" Name="NestedTest" Command="{Binding NestedModel.Command}" />
        <Button Content="Command Method Do" Command="{Binding Do}" x:Name="ToDo"/>
      </StackPanel>
    </TabItem>
  </TabControl>
</Window>
