首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Avalonia组合框装订

Avalonia组合框装订
EN

Stack Overflow用户
提问于 2021-08-20 10:00:17
回答 1查看 855关注 0票数 1

我有一个基于Avalonia MVVM的应用程序。我对Avalonia和MVVM非常陌生,现在正在处理组合框和绑定。我的目标是在用户从组合框中选择组合框项时更改应用程序的当前视图。

我的第一种处理方法是使用按钮作为组合框项。有了这一点,我就能够绑定一个允许视图通过视图模型更改的命令。这种方法有效,但它没有吸引力有一个按钮作为组合框项目。

我真正的问题是,我不确定我是否可以将我的组合框与我的视图-模型沟通。

任何帮助都将不胜感激。

下面是.AXAML

代码语言:javascript
复制
<ComboBox Grid.Column="0" HorizontalAlignment="Center" x:Name="ProductComboBox" PlaceholderText="Products" Cursor="Hand" Background="Transparent">
                       
                            <ComboBoxItem HorizontalAlignment="Center">Beef</ComboBoxItem>
                            <ComboBoxItem HorizontalAlignment="Center">Chicken</ComboBoxItem>
                            <ComboBoxItem HorizontalAlignment="Center">Fish</ComboBoxItem>
</ComboBox>

没有按钮的组合框图像

以下是按钮法:

代码语言:javascript
复制
<ComboBox Grid.Column="1" HorizontalAlignment="Center" SelectedIndex="0" Cursor="hand">
                        <ComboBoxItem HorizontalAlignment="Center">
                            <Button Content="Fresh cuts" HorizontalAlignment="Stretch" Cursor="Hand" Command="{Binding ToFreshCutsPage}"/>
                        </ComboBoxItem>
                        <ComboBoxItem HorizontalAlignment="Center">
                            <Button Content="Butcher's choice" HorizontalAlignment="Stretch" Cursor="Hand" Command="{Binding ToButcherChoicePage}"/>
                        </ComboBoxItem>
                        <ComboBoxItem HorizontalAlignment="Center">
                            <Button Content="Discounts" HorizontalAlignment="Stretch" Cursor="Hand" Command="{Binding ToDiscountsPage}"/>
                        </ComboBoxItem>
</ComboBox>

带按钮的组合框图像

EN

回答 1

Stack Overflow用户

发布于 2022-02-22 15:05:06

一种解决方案是在模型的构造函数中使用反应性和订阅。

ViewModel.cs:

代码语言:javascript
复制
 [Reactive] public int FilterComboBoxIndex { get; set; }

 // In constructor
     this.WhenAnyValue(p_vm => p_vm.FilterComboBoxIndex).Subscribe(_ => GoToPage());

 public void GoToPage()
 {
     // Navigate to page based on FilterComboBoxIndex
     switch ( FilterComboBoxIndex )
     {
        case 0:
            // ToFreshCutsPage
            break;
        case 1:
            // ToButcherChoicePage
            break;
        default:
            // ToDiscountsPage
            break;                
     }
 }

.axaml:

代码语言:javascript
复制
 <ComboBox SelectedIndex="{Binding FilterComboBoxIndex}">
      <ComboBoxItem>Beef</ComboBoxItem>
      <ComboBoxItem>Chicken</ComboBoxItem>
      <ComboBoxItem>Fish</ComboBoxItem>
 </ComboBox>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68860395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档