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();
    }