使用Release WPF DataGrid
我试图绑定到CellViewModel
的属性(当然支持INotifyPropertyChanged
)。我将DataGrid
的{{1}}绑定到类型为ItemsSource
的{{1}} {继承自Dr.WPF的ObservableCollection
RowViewModel
类型ObservableDictonary
我希望绑定到CellViewModel
的属性。
例如,在下面的内容中,我尝试根据CellViewModel
布尔属性更改DatagridCell.FontStyle
属性的状态(如果CellViewModel.IsLocked
则为Italic)。
首先在XAML中公开相关的CellViewModelobject:
IsLocked
RowColumnToCellConverter是
<DataGrid.Resources>
<cv:RowColumnToCellConverter x:Key="RowColumnToCellConverter"/>
<MultiBinding x:Key="CellViewModel" Converter="{StaticResource RowColumnToCellConverter}">
<Binding />
<Binding RelativeSource="{x:Static RelativeSource.Self}" Path="Column" />
</MultiBinding>
</DataGrid.Resources>
然后在XAML中创建public class RowColumnToCellConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
RowViewModel<string,CellViewModel> row = values[0] as RowViewModel<string,CellViewModel>;
string column = (values[1] as DataGridColumn).SortMemberPath;
string col = column.Substring(1, column.Length - 2);
return row[col];
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
:
DataTrigger
现在这不起作用,但是我会喜欢做的一个例子,希望它不远。当然, <DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Value="True" >
<DataTrigger.Binding >
<Binding Path="isLocked" Source="{StaticResource CellViewModel}" />
</DataTrigger.Binding>
<Setter Property="FontStyle" Value="Italic"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
永远不会在这里设置(因为MultiBinding
从不在调试中调用)。
在其他地方,Converter
可以工作(虽然我为这篇文章删减了但希望没有引入任何错误),这是MultiBinding/MultiConverter
的一部分(不像上面那样作为StaticResource - 是我喜欢))然后它只揭示一个不是自己约束的对象。
那就是我可以有一个转换器的变体,其中返回的对象是 row [col] .Islocked 但是然后没有为PropertyChange通知注册Islocked属性。
现在我不能将DataTrigger/MultiTrigger
属性(或者我可以?)添加为原始MultiBind中BindingCollection的第三个绑定语句,因为直到MultiBind返回一个对象,第三个绑定语句没有任何内容< em> {Bind Path = IsLocked} 来引用。
所以我尝试将IsLocked
嵌套在以下类似的东西中,因为MultiBinding
只接受Binding对象而不接受BindingCollection
个对象,所以它不起作用。
MultBinding
希望我的问题应该从上面清楚,即使我尝试的解决方案还很遥远。那我错过了什么? (可能很多,因为我只使用WPF / MVVM几周,这是使用任何DataGrid的一个非常基本的要求,所以我希望答案很简单)。