public void SelectedItem_SelectedIndex_Changed()
        {
            var obj            = new ContextFixture("Monkey", "Monkey");
            var bindingContext = new BindingContext
            {
                Items = new ObservableCollection <object>
                {
                    obj
                },
            };
            var picker = new BindablePicker
            {
                BindingContext    = bindingContext,
                DisplayMemberPath = "DisplayName"
            };

            picker.SetBinding(BindablePicker.ItemsSourceProperty, "Items");
            picker.SetBinding(BindablePicker.SelectedItemProperty, "SelectedItem");
            Assert.Equal(1, picker.Items.Count);
            Assert.Equal(-1, picker.SelectedIndex);
            Assert.Null(picker.SelectedItem);
            picker.SelectedItem = obj;
            Assert.Equal(0, picker.SelectedIndex);
            Assert.Equal(obj, picker.SelectedItem);
            picker.SelectedIndex = -1;
            Assert.Equal(-1, picker.SelectedIndex);
            Assert.Null(picker.SelectedItem);
        }
        public void DisplayMemberPath_ShouldThrowArgumentException_InvalidPath()
        {
            var           obj    = new ContextFixture("Monkey", "Complex Monkey");
            Func <Picker> picker = () => new BindablePicker
            {
                DisplayMemberPath = "Name",
                ItemsSource       = new ObservableCollection <object>
                {
                    obj
                },
                SelectedIndex = 1
            };

            Assert.Throws <ArgumentException>(() => picker());
        }
        public void DisplayMemberPath_NestedPropertyExpression()
        {
            var obj = new ContextFixture
            {
                Nested = new ContextFixture.NestedClass
                {
                    Nested = "NestedProperty"
                }
            };
            var picker = new BindablePicker
            {
                DisplayMemberPath = "Nested.Nested",
                ItemsSource       = new ObservableCollection <object>
                {
                    obj
                },
                SelectedIndex = 0
            };

            Assert.Equal("NestedProperty", picker.Items[0]);
        }
        public void DisplayMemberFunc()
        {
            Func <object, string> customDisplayFunc = o =>
            {
                var f = (ContextFixture)o;
                return($"{f.DisplayName} ({f.ComplexName})");
            };
            var obj    = new ContextFixture("Monkey", "Complex Monkey");
            var picker = new BindablePicker
            {
                DisplayMemberPath = "Name",
                DisplayMemberFunc = customDisplayFunc,
                ItemsSource       = new ObservableCollection <object>
                {
                    obj
                },
                SelectedIndex = 1
            };

            Assert.Equal("Monkey (Complex Monkey)", picker.Items[0]);
        }