我正在尝试创建一个在列表视图中显示“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>
答案 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方法。