c# - 显示时 WPF 按钮内容为空
问题描述
我是 C#/WPF 的新手。有一个定义了一个按钮的视图,当视图初始化时,按钮会显示一组从DataContext(视图模型)获取的原因代码,一旦点击任何按钮,上面的代码将被保存并传递给下一步处理。
Q:按钮上的文字完全是空的,但是点击的代码可以被捕获,那么问题出在哪里?谢谢。
XAML:
<Button x:Name="btnReason" Command="{Binding DataContext.SelectCommand, RelativeSource={RelativeSource AncestorType=v:View, Mode=FindAncestor}}" CommandParameter="{Binding}" Width="190" Height="190" >
<Border Background="Transparent">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock x:Name="Reason" Grid.Row="0" Text="{Binding ?????}" TextWrapping="Wrap" />
</Grid>
</Border>
</Button>
C#上的代码:
public class ReasonsViewModel : ViewModel
{
private IEnumerable<string> m_Names;
public IEnumerable<string> Names
{
get { return m_Names; }
set
{
if (m_Names != value)
{
m_Names = value;
OnPropertyChanged(() => Names);
}
}
}
private string m_SelectedName;
public string SelectedName
{
get { return m_SelectedName; }
set
{
if (m_SelectedName != value)
{
m_SelectedName = value;
OnPropertyChanged(() => SelectedName);
}
}
}
public DelegateCommand SelectCommand { get; private set; }
public ReasonsViewModel()
{
SelectCommand = new DelegateCommand(p => SelectCommandExecute(p));
}
private bool m_Processing;
private void SelectCommandExecute(object item)
{
if (m_Processing) return;
try
{
m_Processing = true;
var name = item as string;
if (name == null) return;
SelectedName = name;
}
finally
{
m_Processing = false;
}
}
}
解决方案
如果我正确地理解了您的问题,那么您的财产text
应该TextBlock
被绑定到SelectedName
。
问题是你CommandParameter
的必然DataContext
。这就是空{Binding}
语句的界限。这意味着您的命令处理程序总是在空检查后返回。
我还建议您将您的Names
财产从更改IEnumerable<string>
为ObservableCollection<string>
。
ObservableCollection 在内部的任何添加或删除项目时引发事件,并且 WPF 组件可以绑定到这些事件。
推荐阅读
- reactjs - React-Quill - addRange():给定的范围不在文档中
- arrays - 角度迭代数组对象
- python - 如何继承django模型使模型记录独立?
- php - mysql 计算按状态排序的订单的最佳方法
- python - 如何使用 Google Colab 在一夜之间训练我的模型?
- unity3d - 在场景构建器中显示禁用网格渲染器的对象
- elasticsearch - 如何在弹性搜索中使用 AND 条件查询两个别名?
- html - 如何禁用输入数字的旋转按钮?
- android - 如何在线性布局中设置视图,使其适合从开始到结束的屏幕,并在一行中包含一定数量的元素?
- java - 使用 OpenID 连接的 Spring Security 5 上的 oidc_provider_not_configured 错误消息