c# - 可点击的按钮来获取数据 wpf mvvm
问题描述
视图.Xaml
<Grid>
<ListView ItemsSource = "{Binding Path = dcCategory}" SelectedValuePath = "Key" SelectedValue = "{Binding Path = Category, Mode = TwoWay}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel Orientation="Horizontal" >
<Button Content="Add Value" Command="{Binding Path=DataContext.AddValue, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type ListView}}}"/>
<TextBlock Text="{Binding Path=Key.Name}"/>
</StackPanel>
<ListBox ItemsSource="{Binding Path=Value}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</Grid>
我的目标是单击添加值并发送所选项目(类别类型)。它现在正在工作,但不像我接受的那样。Insted 只点击按钮,我必须点击第一个蓝色区域,然后用数据“捕捉”“类别”。否则类别为空。
视图模型
private Category _Category;
public Category Category
{
get
{
return _Category;
}
set
{
if (_Category != value)
{
_Category = value;
OnPropertyChanged(() => Category);
}
}
}
public ICommand AddValue
{
get
{
if (_AddValue == null)
{
_AddValue = new BaseCommand(() => Messenger.Default.Send(CategoryValueCode.AddValue + "," + Category.CategoryId));
}
return _AddValue;
}
}
解决方案
这是逻辑,因为您的按钮命令将在ListView.SelectedValue
设置之前执行。你可以改变它,如果你PreviewMouseDown
处理Button
. 我还发现最好设置ListView.SelectionMode
为Single
.
<ListView ItemsSource = "{Binding Path = dcCategory}" SelectedValuePath = "Key" SelectedValue = "{Binding Path = Category, Mode = TwoWay}" SelectionMode="Single">
<Button Content="Add Value" Command="{Binding Path=DataContext.AddValue, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type ListView}}}" PreviewMouseDown="PreviewMouseDown"/>
private void PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
ListViewItem lvi = null;
var visParent = VisualTreeHelper.GetParent(sender as FrameworkElement);
while (lvi == null && visParent != null)
{
lvi = visParent as ListViewItem;
visParent = VisualTreeHelper.GetParent(visParent);
}
if (lvi == null) { return; }
lvi.IsSelected = true;
}
推荐阅读
- kubernetes - 如何获取 kubernetes 作业消耗的资源?
- angularjs - 如何在angularjs中将数据从控制器传递到mainApp
- css - 使用 npm 和 css 代码设置 bootstrap 4 环境在 chrome 中不起作用
- angular - TS 类型缺少以下属性
- python - Pandas - 当两列中都存在 Nan 时,列比较返回 False
- java - 如何返回向量
来自 jni C++ 函数? - angularjs - 我可以为单个元素添加样式和 ng-style 吗?
- docker - Kubernetes 多服务器通信
- visual-studio-2013 - 使用 rdlc 命中 tablix 异常
- java - Spring Boot 编码过滤器