我正在尝试创建一个在列表视图中具有文本"用户请求"的按钮,一旦我单击它,我希望它从不同的列表中过滤一些特定元素。
到目前为止,我拥有的代码甚至没有在视图中显示按钮,更不用说具有所需的功能了。
这就是我目前所拥有的。任何帮助将不胜感激。
<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>
就像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 方法。