beatnikthedan
beatnikthedan

Reputation: 221

UWP Swipeitem won't see any bindings

For some reason I can't use any binding with a UWP Xaml SwipeItem Control. I've tried it in many different ways and with different SwipeItem properties but every time it is null. What's even stranger is any type of x:Bind to any property and it will crash.

if anyone marks this: SwipeItem XAML Binding ignored

as a duplicate question it isn't so don't do it or I'll freak out. That question wasn't even answered.

<SwipeControl>

        <SwipeControl.LeftItems>
            <SwipeItems Mode="Execute">
                <SwipeItem Text="{Binding}" Background="{StaticResource MIIGreen}" BehaviorOnInvoked="Close"/>
            </SwipeItems>
        </SwipeControl.LeftItems>

        <SwipeControl.RightItems>
            <SwipeItems Mode="Execute">
                <SwipeItem Background="{StaticResource MIIRed}" BehaviorOnInvoked="Close" Command="{StaticResource CommandEnclosureNotInstalled}" CommandParameter="{Binding}"/>
            </SwipeItems>
        </SwipeControl.RightItems>

</SwipeControl>

the DataContext is just a simple DataModel and all other controls are binding fine. the command is from a staticresource and the command is firing just fine. in this example any combination of Binding or x:Bind either does nothing or crashes when trying to bind ANYTHING to Text or CommandParamter properties. There has to be something wrong with SwipItem controls, I need a way to pass the DataContext through the CommandParameter.

Upvotes: 0

Views: 237

Answers (1)

Faywang - MSFT
Faywang - MSFT

Reputation: 5868

SwipeControl is not a standard itemControl, it does not have a dataTemplate, so SwipeItem can't find the DataContext of the parent view, so you can't directly use Binding directly in xaml. It seems you can only use Binding in code.(Below I give example of LeftItems).

in xaml:

<SwipeControl Margin="50" LeftItems="{Binding leftItems}">
</SwipeControl>

in cs:

public SwipeItems leftItems { get; set; }
public MainPage()
{
    this.InitializeComponent();
    SwipeItem leftItem = new SwipeItem();
    Binding myBinding = new Binding();
    myBinding.Source = viewmodel;
    myBinding.Path = new PropertyPath("MyText"); //the property in viewmodel
    BindingOperations.SetBinding(leftItem, SwipeItem.CommandParameterProperty, myBinding);
    BindingOperations.SetBinding(leftItem, SwipeItem.TextProperty, myBinding);

    Binding commandBinding = new Binding();
    commandBinding.Source = new FavoriteCommand(); //command class
    BindingOperations.SetBinding(leftItem, SwipeItem.CommandProperty, commandBinding);

    leftItems = new SwipeItems() {
        leftItem
    };
    this.DataContext = this;

}

Upvotes: 1

Related Questions