我在 Xaml 端的 Wpf 應用程式中遇到了一個奇怪的問題,對此我沒有任何解釋。
場景:我有一個系結到一些復雜類的資料網格,一些行有一個帶有一些額外資料的“詳細資訊”類(VSmtp在代碼中),而另一些則沒有。如果用戶選擇了包含額外資料的行,我的計劃是顯示一個小表單。
為此,我制作了一個自定義轉換器,如果系結物件不為空,則啟用控制元件的可見性:
public class NotNullValueToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
我使用此轉換器將表單的可見性系結到資料網格的選定項(SelectedItem在代碼中),對其進行了測驗,它完全按預期作業,只有當用戶選擇一行并且該行設定了額外的類時,表單才會出現
<local:ucSmtpForm
Visibility="{Binding SelectedItem.VSmtp, Converter={StaticResource NotNullValueToVisibilityConverter}}"
>
</local:ucSmtpForm>
對結果感到滿意,我開始將資料系結到表單,但是當我這樣做并再次測驗時,我發現表單現在出現在每一行,即使是那些沒有VSmtp類的
<local:ucSmtpForm
Visibility="{Binding SelectedItem.VSmtp, Converter={StaticResource NotNullValueToVisibilityConverter}}"
DataContext="{Binding SelectedItem.VSmtp}"
>
</local:ucSmtpForm>
我不知道現在表單在沒有VSmtp類的行上可見的原因,而在它正常作業之前,除錯代碼確認該屬性在它應該是空的地方。
有人對此有解釋嗎?
我已經通過簡單地將表單放入網格并將 Visibility 系結移動到它來解決了這個問題,現在可以按預期作業,但是我想知道如果 DataContext 和 Visibility 都系結在 UserControl 中,為什么它不起作用,以便更好地了解未來。
提前感謝
uj5u.com熱心網友回復:
在您DataContext明確設定DataContextforlocal:ucSmtpForm之前SomeViewModel,它具有SelectedItem屬性。
當你設定DataContext為local:ucSmtpForm新的,即SelectedItem.VSmtp系結為Visibility被打破,因為VSmtp沒有一個SelectedItem屬性。這應該有效:
<local:ucSmtpForm
Visibility="{Binding '.', Converter={StaticResource NotNullValueToVisibilityConverter}}"
DataContext="{Binding SelectedItem.VSmtp}"
>
</local:ucSmtpForm>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/425684.html
下一篇:正則運算式替換前綴字串
