从后面的代码设置Columndefinition宽度

时间:2012-09-28 10:46:09

标签: wpf listview datatemplate

我需要根据在后面的代码中完成的一些计算,为listview设置datatemplate中columndefinition的宽度。所以我明白了:

<DataTemplate x:Key="dataTemplateForListview">
        <Border>
        <Grid>                
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="80" x:Name="gridColumnGraph" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
         ...
        </Grid>
       </Border>
</DataTemplate>

此Datatemplate绑定到ListView作为ItemTemplate。如何访问“gridColumnGraph”?在列表视图显示之前我需要此访问权限 - 而不是在选择项目时。

非常感谢!

1 个答案:

答案 0 :(得分:1)

使用数据绑定将Columndefinition.Width-Property绑定到代码隐藏或ViewModel中的某个属性。

确保您的ViewModel继承自INotifiyPropertyChanged。 创建一个调用PropertyChanged-Event的方法:

public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        var e = new PropertyChangedEventArgs(propertyName);
        handler(this, e);
    }
}

创建属性:

private double _cdWidth;
public double CDWidth
{
    get { return _cdWidth; }
    set { _cdWidth= value; OnPropertyChanged("CDWidth"); }
}

绑定财产:

<ColumnDefinition Width={Binding Path=CDWidth}/>

将DataContext设置为ViewModel:

this.DataContext = new ViewModel();

更改代码隐藏中的CDWidth:

ViewModel vm = (ViewModel)this.DataContext;
vm.CDWidth = 10;