我有一個WPF工具包DataGrid綁定到視圖模型中的可觀察對象集合。在這個DataGrid中,我爲該對象的某個字段定義了一個DataGridTemplateColumn。 (Car.Name)WPF DataGrid CurrentItem爲空
我正在嘗試檢測重複項,並在另一個(類似)對象列表中已經存在的單元格上設置了某種樣式。
當這個對話框被加載時,沒有選擇。視圖模型中的IsDuplicate確實爲該行的每個項目調用,但我無法分辨視圖模型中當前處於哪個項目。我想過使用CurrentItem,但它似乎始終爲空。
問:如何在視圖模型中知道當前正在調用的項目?
查看XAML:
<toolkit:DataGrid ItemsSource="{Binding Cars}"
CurrentItem="{Binding CurrentCar}">
...
<toolkit:DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type toolkit:DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding
RelativeSource={RelativeSource FindAncestor,
AncestorType=toolkit:DataGrid},
Path=DataContext.IsDuplicate}" Value="False">
<Setter Property="BorderBrush" Value="Transparent" />
</DataTrigger>
<DataTrigger Binding="{Binding
RelativeSource={RelativeSource FindAncestor,
AncestorType=toolkit:DataGrid},
Path=DataContext.IsDuplicate}" Value="True">
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="BorderThickness" Value="3" />
<Setter Property="ToolTip" Value="Duplicate" />
</DataTrigger>
</Style.Triggers>
</Style>
</toolkit:DataGridTemplateColumn.CellStyle>
ViewModel.cs:
public Car CurrentCar { get; set; }
public bool IsDuplicate
{
get
{
// Logic to check current car against a list of cars
var x = CurrentCar; // null
}
}
|名稱| ...
|汽車1 | ... < - Highlight
|汽車2 | ...
|汽車1 | ... < - 高亮
當對話框加載時,沒有選擇。 – mastofact
@mastofact然後以編程方式選擇一個項目。 'CurrentCar = Cars.FirstOrDefault()'。我不知道你的意思。 –
@mastofact,我沒有試圖太過放肆,但我認爲你的問題實際上是錯誤的,這就是爲什麼@HighCore在這裏忽略了一點。我*想*你實際上並不想知道哪個項目是根據你陳述的目標選擇的:「我試圖檢測重複項,並在另一個(類似)對象列表中已經存在的單元格上設置了某種樣式。 「您所需要的只是「Car」的一個屬性,可以實現這一點;你不應該以任何特定順序遍歷每個項目。 WPF將爲您處理迭代。 – klugerama