[英]WPF - Value inside datagrid fails to update converter when changed externally
事實證明,很難從ObservableCollection內的項目中冒出屬性更改的難度-默認情況下,它僅在修改集合本身時才引發更改的事件,而不會引發其中的項目。
這樣的回答(針對我在這個問題上的另一個問題)表明,解決問題的一種方法是使用轉換器:
對於我的一種情況,項目的樣式取決於其值,並且可以通過用戶編輯DataGrid來更改該值,因此它的工作效果非常好。
但是,在同一個DataGrid中,可以通過按一個按鈕來更新另一個字段-該按鈕在同一個ViewModel中,但它不屬於datagrid本身。 我嘗試了類似的技巧來使它起作用:
<DataGridTextColumn Header="Status" Binding="{Binding Status}" IsReadOnly="True">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Background">
<Setter.Value>
<Binding Converter="{StaticResource BookingBackgroundConverter}" />
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
和轉換器:
public class BookingBackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Booking b = (Booking)value;
switch(b.Status)
{
case "Booking" :
return Brushes.LightBlue;
case "Booked" :
return Brushes.LightGreen;
default :
return Brushes.Transparent;
}
}
public object ConvertBack(object value, Type TargetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
順帶一提,我很驚訝進入Converter的值竟然是Booking-那是行綁定的內容,而不是* column-我期望得到Status的字符串值。 知道為什么會有用,因為它可能與答案有關。
無論如何,這是更改狀態的按鈕單擊命令:
private void BookCount()
{
SelectedBooking.Status = "Booking";
rep.SaveChanges();
OnPropertyChanged("");
}
SelectedBooking是保存當前所選行的屬性。 我無奈地射擊了一個空的OnPropertyChanged,嘗試更新它。
但是,沒有喜悅-在重新加載View之前,轉換器代碼不會被點擊。 為什么轉換器方法適用於數據網格編輯而不適用於按鈕單擊,我該怎么辦才能使按鈕單擊以可視方式更新狀態列?
您更改Status
但綁定整個Booking
對象,這意味着它僅在整個對象更改時才觸發,而不是在該對象中的任何屬性更改時才觸發。 綁定Status
<Binding Path=Status, Converter="{StaticResource BookingBackgroundConverter}" />
並更改轉換器以使用您的預訂狀態而不是Booking
對象。 如果您需要傳遞多個值,請使用IMultiValueConverter
和MultiBinding
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.