類似WPF - help converting XAML binding expression to codebehind綁定從C#代碼隱藏
我試圖DataGridTextColumn顏色使用綁定改變一個DataGridTextColumn某些元素的顏色。因爲我需要在單獨的選項卡中使用任意數量的DataGrid,所以我在代碼隱藏中迭代創建它們。這裏是我創建列代碼:
// create a value column
column = new DataGridTextColumn();
column.Binding = new Binding("Value");
BindingOperations.SetBinding(column, DataGridTextColumn.ForegroundProperty, new Binding("TextColor"));
listGrid.Columns.Add(column);
值綁定工作正常,但文字顏色屬性的getter不會被調用。
網格的ItemsSource屬性設置爲VariableWatcher對象的列表,這裏是它的一些特性:
public bool Value
{
get { return _variable.Value; }
}
// used to set DataGridTextColumn.Foreground
public Brush TextColor
{
get
{
Color brushColor;
if (_valueChanged)
brushColor = Color.FromRgb(255, 0, 0);
else
brushColor = Color.FromRgb(0, 0, 0);
return new SolidColorBrush(brushColor);
}
}
VariableWatcher實現INotifyPropertyChanged如下:
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
在VariableWatcher的方法之一,我有以下幾行:
_valueChanged = true;
NotifyPropertyChanged("Value");
NotifyPropertyChanged("TextColor");
單擊「Value」行將激活Value getter中的斷點,並在顯示中更新Value文本。但是,跨越「TextColor」行不會激活TextColor getter中的斷點,並且文本顏色不會更改。任何想法這裏發生了什麼?
編輯:這是答案,感謝大馬士革。 (我早就把這個在他的回答評論,但它不會正確地格式化我的代碼)。我已將此添加到XAML文件:
<Window.Resources>
<Style x:Key="BoundColorStyle" TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="{Binding TextColor}" />
</Style>
</Window.Resources>
,並在C#代碼,我取代了BindingOperations線與
column.ElementStyle = this.FindResource("BoundColorStyle") as Style;
謝謝!我發佈了我在上面的問題中添加的確切代碼。 – hypehuman