|
@@ -28,11 +28,36 @@ namespace Avalonia.ReactiveUI.UnitTests
|
|
|
|
|
|
public class ExampleView : ReactiveUserControl<ExampleViewModel>
|
|
public class ExampleView : ReactiveUserControl<ExampleViewModel>
|
|
{
|
|
{
|
|
- public ItemsControl List { get; } = new ItemsControl();
|
|
|
|
|
|
+ public ItemsControl List { get; } = new ItemsControl
|
|
|
|
+ {
|
|
|
|
+ Template = GetTemplate()
|
|
|
|
+ };
|
|
|
|
|
|
public ExampleView()
|
|
public ExampleView()
|
|
{
|
|
{
|
|
|
|
+ List.ApplyTemplate();
|
|
|
|
+ List.Presenter.ApplyTemplate();
|
|
Content = List;
|
|
Content = List;
|
|
|
|
+
|
|
|
|
+ ViewModel = new ExampleViewModel();
|
|
|
|
+ this.OneWayBind(ViewModel, x => x.Items, x => x.List.Items);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public class ExampleViewWithItemTemplate : ReactiveUserControl<ExampleViewModel>
|
|
|
|
+ {
|
|
|
|
+ public ItemsControl List { get; } = new ItemsControl
|
|
|
|
+ {
|
|
|
|
+ Template = GetTemplate()
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ public ExampleViewWithItemTemplate()
|
|
|
|
+ {
|
|
|
|
+ List.ApplyTemplate();
|
|
|
|
+ List.Presenter.ApplyTemplate();
|
|
|
|
+ List.ItemTemplate = GetItemTemplate();
|
|
|
|
+ Content = List;
|
|
|
|
+
|
|
ViewModel = new ExampleViewModel();
|
|
ViewModel = new ExampleViewModel();
|
|
this.OneWayBind(ViewModel, x => x.Items, x => x.List.Items);
|
|
this.OneWayBind(ViewModel, x => x.Items, x => x.List.Items);
|
|
}
|
|
}
|
|
@@ -50,6 +75,15 @@ namespace Avalonia.ReactiveUI.UnitTests
|
|
{
|
|
{
|
|
var view = new ExampleView();
|
|
var view = new ExampleView();
|
|
Assert.NotNull(view.List.ItemTemplate);
|
|
Assert.NotNull(view.List.ItemTemplate);
|
|
|
|
+ Assert.IsType<FuncDataTemplate<object>>(view.List.ItemTemplate);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [Fact]
|
|
|
|
+ public void Should_Not_Override_Data_Template_Binding_When_Item_Template_Is_Set()
|
|
|
|
+ {
|
|
|
|
+ var view = new ExampleViewWithItemTemplate();
|
|
|
|
+ Assert.NotNull(view.List.ItemTemplate);
|
|
|
|
+ Assert.IsType<FuncDataTemplate<TextBlock>>(view.List.ItemTemplate);
|
|
}
|
|
}
|
|
|
|
|
|
[Fact]
|
|
[Fact]
|
|
@@ -58,10 +92,6 @@ namespace Avalonia.ReactiveUI.UnitTests
|
|
var view = new ExampleView();
|
|
var view = new ExampleView();
|
|
view.ViewModel.Items.Add(new NestedViewModel());
|
|
view.ViewModel.Items.Add(new NestedViewModel());
|
|
|
|
|
|
- view.List.Template = GetTemplate();
|
|
|
|
- view.List.ApplyTemplate();
|
|
|
|
- view.List.Presenter.ApplyTemplate();
|
|
|
|
-
|
|
|
|
var child = view.List.Presenter.Panel.Children[0];
|
|
var child = view.List.Presenter.Panel.Children[0];
|
|
var container = (ContentPresenter) child;
|
|
var container = (ContentPresenter) child;
|
|
container.UpdateChild();
|
|
container.UpdateChild();
|
|
@@ -69,6 +99,19 @@ namespace Avalonia.ReactiveUI.UnitTests
|
|
Assert.IsType<ViewModelViewHost>(container.Child);
|
|
Assert.IsType<ViewModelViewHost>(container.Child);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ [Fact]
|
|
|
|
+ public void Should_Not_Use_View_Model_View_Host_When_Item_Template_Is_Set()
|
|
|
|
+ {
|
|
|
|
+ var view = new ExampleViewWithItemTemplate();
|
|
|
|
+ view.ViewModel.Items.Add(new NestedViewModel());
|
|
|
|
+
|
|
|
|
+ var child = view.List.Presenter.Panel.Children[0];
|
|
|
|
+ var container = (ContentPresenter) child;
|
|
|
|
+ container.UpdateChild();
|
|
|
|
+
|
|
|
|
+ Assert.IsType<TextBlock>(container.Child);
|
|
|
|
+ }
|
|
|
|
+
|
|
[Fact]
|
|
[Fact]
|
|
public void Should_Resolve_And_Embedd_Appropriate_View_Model()
|
|
public void Should_Resolve_And_Embedd_Appropriate_View_Model()
|
|
{
|
|
{
|
|
@@ -76,10 +119,6 @@ namespace Avalonia.ReactiveUI.UnitTests
|
|
var root = new TestRoot { Child = view };
|
|
var root = new TestRoot { Child = view };
|
|
view.ViewModel.Items.Add(new NestedViewModel());
|
|
view.ViewModel.Items.Add(new NestedViewModel());
|
|
|
|
|
|
- view.List.Template = GetTemplate();
|
|
|
|
- view.List.ApplyTemplate();
|
|
|
|
- view.List.Presenter.ApplyTemplate();
|
|
|
|
-
|
|
|
|
var child = view.List.Presenter.Panel.Children[0];
|
|
var child = view.List.Presenter.Panel.Children[0];
|
|
var container = (ContentPresenter) child;
|
|
var container = (ContentPresenter) child;
|
|
container.UpdateChild();
|
|
container.UpdateChild();
|
|
@@ -93,7 +132,12 @@ namespace Avalonia.ReactiveUI.UnitTests
|
|
Assert.IsType<string>(host.DataContext);
|
|
Assert.IsType<string>(host.DataContext);
|
|
}
|
|
}
|
|
|
|
|
|
- private FuncControlTemplate GetTemplate()
|
|
|
|
|
|
+ private static FuncDataTemplate GetItemTemplate()
|
|
|
|
+ {
|
|
|
|
+ return new FuncDataTemplate<TextBlock>((parent, scope) => new TextBlock());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static FuncControlTemplate GetTemplate()
|
|
{
|
|
{
|
|
return new FuncControlTemplate<ItemsControl>((parent, scope) =>
|
|
return new FuncControlTemplate<ItemsControl>((parent, scope) =>
|
|
{
|
|
{
|