嗨,我有2個網格列表視圖。每個列表視圖都包含一個文本框,兩個列表視圖中的文本框都具有相同的文本。當我在文本框中選擇部分文本時,其他文本框也會選擇文本的相同部分。文本框中的選定文本
可以在兩個不同的listview中的兩個文本框之間進行綁定嗎?
嗨,我有2個網格列表視圖。每個列表視圖都包含一個文本框,兩個列表視圖中的文本框都具有相同的文本。當我在文本框中選擇部分文本時,其他文本框也會選擇文本的相同部分。文本框中的選定文本
可以在兩個不同的listview中的兩個文本框之間進行綁定嗎?
很遺憾,因爲SelectionText
,SelectionLength
和SelectionStart
不是依賴項屬性,所以兩個文本框不能在這些屬性上雙向綁定。
您必須編寫一個附加的行爲,將一個文本框附加到另一個文本框,併爲兩者處理TextBox.SelectionChangedEvent
,並在處理事件時同步另一個文本框。
由於AngelWPF寫道,選擇*屬性不是依賴屬性,所以你不能對它們使用數據綁定。
雖然你可以做的是添加你自己的具有替代原始屬性的依賴項屬性的文本框子菜單。這些可以實現爲使用與原始屬性相同的名稱的常規依賴項屬性,但是它們的定義必須是public new
才能替換原件。
我不會發佈一個完整的代碼示例在這裏(代碼太多,我沒有它在此計算機上),但你可以做類似如下:
public class BindableSelectionTextBox : TextBox
{
// Defines the dependency property as normal
public static readonly DependencyProperty SelectedTextProperty =
DependencyProperty.RegisterAttached(SelectedText, typeof(string),
typeof(BindableSelectionTextBox),
new FrameworkPropertyMetadata("", SelectedTextPropertyChanged));
private static void SelectedTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var textBox = (TextBox)d;
textBox.SelectedText = (string)e.NewValue;
}
public new string SelectedText
{
get { return (string)GetValue(SelectedTextProperty); }
set
{
if(value != SelectedText)
{
SetValue(SelectedTextProperty, value);
}
}
}
public BindableSelectionTextBox()
{
SelectionChanged += OnSelectionChanged;
}
private void OnSelectionChanged(object sender, RoutedEventArgs e)
{
SelectedText = base.SelectedText;
}
}
現在,你必須重複這爲SelectionStart
和SelectionLength
屬性,你應該完成。
嗯那麼xaml方面呢,我該如何去做呢? – edelweiss
在Xaml中,您只需使用常規數據綁定到您的View Model。將兩個文本框綁定到相同的屬性,並且應該設置。 –
或者,您可以擁有兩個屬性,但必須手動同步它們。 –