无法在 Xaml 列表视图中创建特定按钮

本文关键字:创建 按钮 视图 Xaml 列表 | 更新日期: 2023-09-27 18:36:50

我正在尝试创建一个在列表视图中具有文本"用户请求"的按钮,一旦我单击它,我希望它从不同的列表中过滤一些特定元素。

到目前为止,我拥有的代码甚至没有在视图中显示按钮,更不用说具有所需的功能了。

这就是我目前所拥有的。任何帮助将不胜感激。

<ListView 
   ItemsSource="{Binding UserRequests}"  
   SelectionMode="Single"  
   Width="Auto"   
   ItemContainerStyle="{StaticResource listViewSingleClick}" 
   mvvm:CommandBehavior.Command="{Binding ViewOrder}" 
   ScrollViewer.VerticalScrollBarVisibility="Auto" 
   ScrollViewer.HorizontalScrollBarVisibility="Hidden">
   <ListView.View>
      <GridView>
         <GridViewColumn Header="Custom Filters" Width="170">
            <GridViewColumn.CellTemplate>
               <DataTemplate>
                  <TextBlock Text=" {Binding UserRequests}"/>
               </DataTemplate>
            </GridViewColumn.CellTemplate>
         </GridViewColumn>
      </GridView>
   </ListView.View>
</ListView>

无法在 Xaml 列表视图中创建特定按钮

就像sk_的评论所说,您提供的代码存在许多可能的问题,例如可能错误的数据绑定,以及实际上没有按钮控件。

我将只向您展示一些示例代码,希望这使您能够将所需的功能添加到您自己的代码中。请记住,这只是我满足要求的方式,这不是唯一的方法。

视图模型:

public class UserRequest : BaseViewModel  {
    public String Text { get; set; }
    public ICommand Command { get; set; }
    public UserRequest()
    {
        Command = new RelayCommand(ActionToExecute);
    }
    public void ActionToExecute()
    {
        //Doing stuff here!
    }
}
public class SomeViewModel : BaseViewModel
{
    public ObservableCollection<UserRequest> UserRequests { get; set; }  
    public SomeViewModel()
    {
        UserRequests = new ObservableCollection<UserRequest>();
        UserRequests.Add(new UserRequest() {Text = "Test1"});
        UserRequests.Add(new UserRequest() { Text = "Test2" });
    }
}

BaseViewModel 只是实现了 INotifyPropertychanged。RelayCommand 是一个帮助程序类,可以在这里找到。我们需要命令属性才能将操作绑定到按钮单击。在 SomeViewModel 的构造函数中,我们只是将一些项添加到我们的列表中(因此我们实际上在视图中看到了一些内容)。

主窗口.cs:

public partial class MainWindow : Window {
    public SomeViewModel SomeViewModel { get; set; }
    public MainWindow() {
        SomeViewModel = new SomeViewModel();
        DataContext = SomeViewModel;
        InitializeComponent();
    }
}

为了简单起见,我在 MainWindows 代码隐藏中设置了 DataContext。如果您愿意,可以随意以不同的方式设置数据上下文。

MainWindow.xaml:

 <Grid>
    <ListView 
    ItemsSource="{Binding UserRequests}"  
    SelectionMode="Single"  
    Width="Auto"   
    ScrollViewer.VerticalScrollBarVisibility="Auto" 
    ScrollViewer.HorizontalScrollBarVisibility="Hidden">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Custom Filters" Width="170">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Button Command="{Binding Command}" Content="{Binding Text}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>

为了简单起见,我在这里删除了一些行(例如ViewOrder)。这将产生一个包含按钮的列表视图(在 SomeViewModel 中定义了文本)。单击其中一个按钮将导致执行 ActionToExecute 方法。