Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GridViewColumn.Width绑定并双击可自动调整列大小_C#_Wpf_Xaml_Binding - Fatal编程技术网

C# GridViewColumn.Width绑定并双击可自动调整列大小

C# GridViewColumn.Width绑定并双击可自动调整列大小,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,像这样绑定列宽 <ListView ...> <ListView.View> <GridView> <GridViewColumn Width="{Binding Width, Mode=TwoWay}" ... /> ... more columns </GridView> </ListView.View> </ListV

像这样绑定列宽

<ListView ...>
    <ListView.View>
        <GridView>
            <GridViewColumn Width="{Binding Width, Mode=TwoWay}" ... />
            ... more columns
        </GridView>
    </ListView.View>
</ListView>

... 更多栏目
问题:双击列标题行(自动调整列大小)时,不会触发
Width
setter,这意味着更改列宽后绑定源不会更新。正常的列大小调整工作没有问题

建议

我不想这样做,只是为了解决一个问题。

查看,似乎应该更新
宽度
属性。也许装订有问题?您可能希望查看输出窗口中打印的内容


撇开这个问题不谈,您可能无法通过绑定到
Width
属性来获得所需的行为。从中可以看出,它被设置为
NaN
,以使列自动调整大小。这意味着,即使您的属性设置程序被调用,它也将获得传递给它的
NaN
。您可以使用
OneWayToSource
绑定模式绑定到
ActualWidth
,除非出于其他原因,您实际上需要将绑定设置为
TwoWay

我更愿意删除我的问题,但可能对其他犯同样错误的人有用(我怀疑)

问题在于
宽度
类型。我使用了
int
,它似乎可以完美地工作。但无论出于何种原因,双击调整大小都不起作用


修复方法:使用
double-Width{get;set;}
绑定到,而不是
int

在我的例子中,我通过以下操作解决了问题:

一,。 我有一个属性“\u gridView”,它是gridView对象,表示名为“\u ListView”的ListView的视图

三,。 在WPF窗口的构造函数中,我插入了另一段代码,以便在每次“\u listView”的“ItemsSource”更改时执行宽度的更新:

public MainWindow()
{
    InitializeComponent();

    DependencyPropertyDescriptor
        .FromProperty(ListView.ItemsSourceProperty, typeof(ListView))
        .AddValueChanged(_listView, (s, e) => {
            UpdateWidths();
    });
}
四,。 因此,每次我更改对象“\u listView”的“ItemsSource”属性时,所有列都会更新

_listView.ItemsSource = __New value__

在这种情况下,
宽度是多少?确保设置了DataContext,检查输出窗口以获取线索。@MikeEason,在双击之前,一切都正常(通过代码或通过拖动列标题行在两个方向上调整正常的列大小)。确定,宽度是否确实发生了变化?我的意思是,您可以双击,但是如果列的宽度不变,那么绑定属性将不会更新。尝试在属性的集合部分放置一个断点(假设它只是一个CLR属性)以查看它是否命中。它确实会更改。我注意到这个问题,双击设置的宽度并没有被记忆,若我重新启动应用程序,上一个宽度被设置。我做的第一件事就是在setter中设置断点。当你双击并在视觉上改变宽度时,它不会被触发。有趣的观察,谢谢。不幸的是,我需要双向绑定来从代码恢复列宽(当应用程序启动时)。详细绑定非常好,谢谢。您的
NaN
观察结果有帮助,确实存在System.Windows.Data错误:7:ConvertBack无法转换值'n。输出窗口中的def.'(键入“Double”),这会导致绑定问题。。到
int
,lol。
public MainWindow()
{
    InitializeComponent();

    DependencyPropertyDescriptor
        .FromProperty(ListView.ItemsSourceProperty, typeof(ListView))
        .AddValueChanged(_listView, (s, e) => {
            UpdateWidths();
    });
}
_listView.ItemsSource = __New value__