我在我的視圖模型,其具有例如具有多個屬性的類的屬性的屬性如何使用IValueConverter綁定到WPF中某個對象的不同屬性?
public class Content
{
public int Selector { get; set; }
public int Value1 { get; set; }
public int Value2 { get; set; }
public int Value3 { get; set; }
public int Value4 { get; set; }
}
public class ViewModel
{
public Content ContentInstance { get; set; }
}
我想用一個轉換器將它綁定到我的xaml中,這樣選擇器的值決定了哪個值綁定到元素,例如
<TextBox Text="{Binding ContentInstance, Converter="ContentValueConverter", TargetNullValue='', Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
到目前爲止,我有:
public class ContentValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var contentPart = value as Content;
if(contentPart == null) return;
switch(contentPart.Selector)
{
case 1:
return contentPart.Value1;
//etc
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
這個工程要顯示的數值,但不保存值回模型。 我寧願將它保存在IValueConverter中,因爲這必須添加到代碼庫中的許多地方。任何幫助將價值節約回到模型將不勝感激。
您需要實現* ConvertBack *方法,並使用附加屬性作爲ConverterParameter傳入您的內容。爲什麼不只是在Content類中做所有事情而不是使用轉換器?甚至在你的視圖模型中?奇怪你想如何在UI轉換器中做潛在的'業務邏輯'。 – Ruskin
@Ruskin +1。視圖模型的重點在於將數據轉換爲視圖容易使用的格式。如果您發現自己不得不在轉換器中實現此類特定邏輯,那麼這通常表明您的視圖模型沒有正確執行其工作。 –
@Ruskin我明白這是商業邏輯,但是我正在一個非常古老的代碼庫中工作,這是在沒有考慮MVVM的情況下編寫的。我的老闆要求我做這個影響很小,所以我僅限於在UI庫中工作,但他也希望它整齊地打包,這樣它就可以應用到代碼庫的其餘部分。但你是對的,這不是一個理想的做法。 –