mar*_*ler 5 c# wpf xaml gridview inotifypropertychanged
我已成功将DataGrid中的列绑定到具有实现INotifyPropertyChanged接口的对象的可观察集合:
这是xaml:
<dxg:GridColumn Name="Name" FieldName="Stapel" DisplayMemberBinding="{Binding Path=Name}" />
Run Code Online (Sandbox Code Playgroud)
而对象类中的属性:
public string Name
{
get { return _name; }
set
{
if (value == _name) return;
_name = value;
OnPropertyChanged("Name");
}
}
Run Code Online (Sandbox Code Playgroud)
但是在另一个专栏中我使用的是模板:
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<Rectangle Height="19" Width="19" Fill="{Binding Path=Data.StatusColor}"></Rectangle>
</StackPanel>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
Run Code Online (Sandbox Code Playgroud)
矩形的Fill属性绑定到"计算"属性:
public SolidColorBrush StatusColor
{
get
{
if (StapelStatus == StapelStatus.Neu)
{
return new SolidColorBrush(Colors.CornflowerBlue);
}
return new SolidColorBrush(Colors.DarkOrange);
}
}
Run Code Online (Sandbox Code Playgroud)
一些其他属性设置器,它们改变了值的StapelStatus调用
OnPropertyChanged("StatusColor");
Run Code Online (Sandbox Code Playgroud)
我认为这足以改变网格列中矩形颜色的颜色.但不幸的StapelStatus是,当改变并被OnPropertyChanged("StatusColor")称为网格时,并不反映这种变化.我想我必须以某种方式改变绑定DataTemplate.有人可以给我一个建议吗?
这确实是 XAML 中的绑定问题。不幸的是我没有在 GridColumn 中设置 FieldName 属性。我认为 FieldName 仅适用于没有任何模板的普通 GridColumns。
下面是该列的工作 XAML:
<dxg:GridColumn Header="" FieldName="StatusColor">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Rectangle RadiusX="19" RadiusY="19" Height="19" Width="19" Stroke="Black" Fill="{Binding Path=Value}"></Rectangle>
</StackPanel>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
666 次 |
| 最近记录: |