【问题标题】:Xamarin MVVM pass object propertiesXamarin MVVM 传递对象属性
【发布时间】:2020-08-05 14:35:42
【问题描述】:

所以我对整个 MVVM 还是很陌生。我非常了解它的基础知识。我有一个可以正常工作的示例,但我正在尝试将其更改为 MVVM 样式。我只是尝试不同的例子,以便学习。

(LoginPage.xaml)

在 XAML 方面,我有一个带有点击手势的标签。很单身

<!--  Existing Tab  -->
            <Label x:Name="labelName"
                   Grid.Column="0"
                   Style="{StaticResource CenteredTextTitle}"
                   Text="Log In">
                <Label.GestureRecognizers>
                    <TapGestureRecognizer Tapped="SelectorOption_Tapped" />
                </Label.GestureRecognizers>
            </Label>

LoginPage.xaml.cs 页面

我可以通过创建一个点击函数来访问它。

private async void SelectorOption_Tapped(object sender, EventArgs e)
        {
            if (!(sender is Xamarin.Forms.View view)) return;

            int index = Grid.GetColumn(view);

           ...
        }

现在我正在尝试将其更改为 MVVM.. 所以 XAML 保持不变

在 ViewModel 页面上 loginpageviewmodel.cs 页面

public LoginPageViewModel()
    {
        btnSubmit_Clicked = new Command(SubmitClicked);
    }

    public ICommand btnSubmit_Clicked { get; set; }

    private void SubmitClicked(object parameter)
    {
        if (!(parameter is Xamarin.Forms.View view)) return;

        var index = Grid.GetColumn(view);
     }

我可以运行函数 submitclicked。但我不能传递参数。它始终为空。 我想根据用户选择从我拥有的网格中获取列。它以原始方式工作正常,但如果我尝试将其更改为 MVVM,我无法通过视图表单来获取 getcolumn .. 反正我可以通过吗?

【问题讨论】:

  • 我的解决方案对您有用吗?如果是,请您接受(点击此答案左上角的☑️),以便我们可以帮助更多有相同问题的人:)。
  • 是的.. 工作感谢您的帮助.. 接受它.. 再次感谢您

标签: xamarin mvvm parameters


【解决方案1】:

参数来自你在xaml中设置的CommandParameter:

<StackLayout>
    <!-- Place new controls here -->
    <Label x:Name="myLabel" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" Text="Log In">
        <Label.GestureRecognizers>
            <TapGestureRecognizer Command="{Binding btnSubmit_Clicked}" CommandParameter="{x:Reference myLabel}"/>
        </Label.GestureRecognizers>
    </Label>
</StackLayout>

在后面的代码中:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        BindingContext = new LoginPageViewModel();
    }
}

public class LoginPageViewModel
{

    public LoginPageViewModel()
    {
        btnSubmit_Clicked = new Command(SubmitClicked);
    }

    public ICommand btnSubmit_Clicked { get; set; }

    private void SubmitClicked(object parameter)
    {
        if (!(parameter is Xamarin.Forms.View view)) return;

        Console.WriteLine(parameter);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多