我需要根据在后面的代码中完成的一些计算,为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”?在列表视图显示之前我需要此访问权限 - 而不是在选择项目时。
非常感谢!
答案 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;