C# 如果加载时内容发生更改,StackPanel中的WPF标签不会调整大小
请查看数据绑定的C# 如果加载时内容发生更改,StackPanel中的WPF标签不会调整大小,c#,wpf,data-binding,C#,Wpf,Data Binding,请查看数据绑定的标签,该标签在加载时不会调整大小。之后,当在列表视图中选择不同的项目时(但它们必须具有不同的长度!),它会起作用 “调整大小”的定义: 通常,标签会自动调整其宽度以适应内容。在我的功绩中,这不会发生。内容被切断 当然,它必须是s。th。事实上,我通过项的专用属性AutoSelect实现了自动选择机制 如何在保留自动选择逻辑的同时解决此问题? 请将多重选择的可能性排除在方程式之外,因为这与此问题无关 查看: 视图模型: 使用System.Collections.Object
标签
,该标签在加载时不会调整大小。之后,当在列表视图中选择不同的项目时(但它们必须具有不同的长度!),它会起作用
“调整大小”的定义:
通常,标签会自动调整其宽度以适应内容。在我的功绩中,这不会发生。内容被切断
当然,它必须是s。th。事实上,我通过项的专用属性AutoSelect
实现了自动选择机制
如何在保留自动选择逻辑的同时解决此问题?
请将多重选择的可能性排除在方程式之外,因为这与此问题无关
查看:
视图模型:
使用System.Collections.ObjectModel;
使用系统组件模型;
命名空间TestApp\uuuuuuwpf\uListView
{
公共类视图模型:INotifyPropertyChanged
{
私有项m_SelectedItem=null;
公共事件属性更改事件处理程序属性更改;
受保护的无效DoPropertyChanged(字符串propertyName)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
公共可观察集合项{get;}
公共项目选择项
{
收到
{
返回m_SelectedItem;
}
设置
{
m_SelectedItem=值;
DoPropertyChanged(“SelectedItem”);
DoPropertyChanged(“SelectedItemName”);
}
}
公共字符串SelectedItemName{get{返回m_SelectedItem?.Name???“null”}
}
公共视图模型()
{
Items=新的ObservableCollection();
项目。添加(新项目(“项目1 asölkasd”,false));
项目。添加(新项目(“项目2为”,假));
添加(新项目(“项目3 asdköwowfialöafl”,false));
项目。添加(新项目(“项目4 akksad”,真));
添加(新项目(“项目5 aöasölskfawellkasdlk”,false));
添加(新项目(“项目6 aslsdkföwl”,false));
}
}
}
数据项:
namespace TestApp\uuuuuwpf\u列表视图
{
公共类项目
{
公共字符串名称{get;set;}
公共bool自动选择{get;set;}
公共项(字符串p_名称,布尔p_自动选择)
{
名称=p_名称;
自动选择=p_自动选择;
}
}
}
当然,我花了几个小时从实际的业务应用程序中找出问题的根本原因…;-) 如果在加载视图模型时将XAML中的从更改为加载,则加载语句中的将解决此问题。问题是视图模型是在视图之前创建的,因此没有通知通知视图要更新。单击列表中的某个项目后,视图将更新并接收通知事件,所有内容都将正确更新
删除:
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
谢谢斯图尔特,这很有效!不过,我正在失去在设计器中进行内容预览的能力。当然,这不是关键任务,请告诉我是否还有其他选择。我也遇到过问题,但我还没有找到任何真正好的解决方案
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.DataContext = new ViewModel();
}