@ -1,5 +1,6 @@
using Avalonia.Data ;
using Avalonia.Data ;
using Xunit ;
using Xunit ;
using Xunit.Sdk ;
# nullable enable
# nullable enable
@ -67,4 +68,70 @@ public partial class BindingExpressionTests
data2 . DoubleValue = 0.2 ;
data2 . DoubleValue = 0.2 ;
Assert . Equal ( 0.5 , target . Double ) ;
Assert . Equal ( 0.5 , target . Double ) ;
}
}
[Fact]
public void OneWayToSource_Binding_Updates_Source_When_Target_Changes ( )
{
var data = new ViewModel ( ) ;
var target = CreateTarget < ViewModel , string? > (
x = > x . StringValue ,
dataContext : data ,
mode : BindingMode . OneWayToSource ) ;
Assert . Null ( data . StringValue ) ;
target . String = "foo" ;
Assert . Equal ( "foo" , data . StringValue ) ;
}
[Fact]
public void OneWayToSource_Binding_Does_Not_Update_Target_When_Source_Changes ( )
{
var data = new ViewModel ( ) ;
var target = CreateTarget < ViewModel , string? > (
x = > x . StringValue ,
dataContext : data ,
mode : BindingMode . OneWayToSource ) ;
target . String = "foo" ;
Assert . Equal ( "foo" , data . StringValue ) ;
data . StringValue = "bar" ;
Assert . Equal ( "foo" , target . String ) ;
}
[Fact]
public void OneWayToSource_Binding_Updates_Source_When_DataContext_Changes ( )
{
var data1 = new ViewModel ( ) ;
var data2 = new ViewModel ( ) ;
var target = CreateTarget < ViewModel , string? > (
x = > x . StringValue ,
dataContext : data1 ,
mode : BindingMode . OneWayToSource ) ;
target . String = "foo" ;
Assert . Equal ( "foo" , data1 . StringValue ) ;
target . DataContext = data2 ;
Assert . Equal ( "foo" , data2 . StringValue ) ;
}
[Fact]
public void Can_Bind_Readonly_Property_OneWayToSource ( )
{
var data = new ViewModel ( ) ;
var target = CreateTarget < ViewModel , string? > (
x = > x . StringValue ,
dataContext : data ,
mode : BindingMode . OneWayToSource ,
targetProperty : TargetClass . ReadOnlyStringProperty ) ;
Assert . Equal ( "readonly" , data . StringValue ) ;
target . SetReadOnlyString ( "foo" ) ;
Assert . Equal ( "foo" , data . StringValue ) ;
}
}
}