我有一個綁定到一個對象像這樣的實體框架模型:如何「鏈接」綁定?
public class Object
{
public string _name; //actual name
public string _display_name;
....
}
DISPLAY_NAME的,在大多數情況下,將是一樣的actual_name。所以,在WPF窗口中,我有兩個輸入(TextBox)的視圖。
第一個輸入綁定到View Model屬性DisplayName。這樣做的目的是,使得所述第二輸入(顯示名稱),默認情況下,等於第一(實際名稱):
<TextBox x:Name="NameInputBox" Margin="5,5,5,5" Width="100" MaxLength="50"
Text="{Binding Path=Name, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" />
第二輸入是使用MultiBinding。 MultiBinding中的第一個綁定是第一個輸入的Text屬性。這適當地更新第二個盒子等於第一個盒子。
第二個綁定綁定到視圖模型中的DisplayName屬性。 DisplayName屬性沒有被置位,儘管第二個輸入文本正在發生變化:
<TextBox x:Name="DisplayNameInput" Margin="5,5,5,5" Width="100" MaxLength="50">
<TextBox.Text>
<MultiBinding Converter="{StaticResource TwoToOneConverter}">
<Binding ElementName="NameInputBox" Path="Text" Mode="OneWay" UpdateSourceTrigger="PropertyChanged" />
<Binding Path="DisplayName" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" />
</MultiBinding>
</TextBox.Text>
</TextBox>
這裏有屬性:
public String Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public string DisplayName
{
get { return _display_name; }
set
{
_display_name = value;
OnPropertyChanged("DisplayName");
}
}
最後,我的轉換器:
/// <summary>
/// When given two inputs, just take one of them.
/// </summary>
public object Convert(object[] values, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return values[0];
}
/// <summary>
/// Return the value, unchanged, as two values.
/// </summary>
public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
System.Globalization.CultureInfo culture)
{
return new object[] { value, value };
}
任何人有任何想法我不正確地做什麼?我覺得它與轉換器有關,因爲我沒有按照在線樣本描述的方式使用它。有沒有另一種方法來實現我正在嘗試的?
我認爲從代碼中這樣做會更有意義:如果'_display_name'爲'null','DisplayName'返回'Name'。這也意味着您需要將'OnPropertyChanged(「DisplayName」);'添加到'Name'設置器。 – svick
這聽起來像個好主意,謝謝! – Lycus
我懷疑你的轉換器可能會有效地強迫價值永不改變。轉換器始終處於活動狀態 - 它將不斷返回「轉換」的結果,該轉換始終爲值[0](名稱)。所以即使displayname(值[1])改變,文本也會重置爲值[0]。 – nmclean