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

时间:2015-01-08 16:49:35

标签: c# wpf xaml

我正在尝试创建一个在列表视图中显示“User Requests”文本的按钮,一旦我点击它,我希望它可以过滤来自不同列表的某些特定元素。

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

这是我到目前为止所拥有的。任何帮助将非常感谢。

<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>

1 个答案:

答案 0 :(得分:1)

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

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

ViewModel:

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是一个可以找到的助手类here。我们需要Command属性才能将操作绑定到按钮单击。在SomeViewModel的构造函数中,我们只是将一些项添加到列表中(所以我们实际上在View中看到了一些内容)。

MainWindow.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方法。