gpt4 book ai didi

wpf - MVVM 和 TextBox 的 SelectedText 属性

转载 作者:行者123 更新时间:2023-12-03 23:25:26 26 4
gpt4 key购买 nike

我有一个带有 ContextMenu 的 TextBox。当用户在 TextBox 内右键单击并选择适当的 MenuItem 时,我想在我的 View 模型中获取 SelectedText。我还没有找到一种“MVVM”方式的好方法。

到目前为止,我的应用程序使用了 Josh Smith 的 MVVM 方式。我正在寻找转移到Cinch。不确定 Cinch 框架是否会处理此类问题。想法?

最佳答案

没有直接的方法将 SelectedText 绑定(bind)到数据源,因为它不是 DependencyProperty...但是,创建一个可以绑定(bind)的附加属性非常容易。

这是一个基本的实现:

public static class TextBoxHelper
{

public static string GetSelectedText(DependencyObject obj)
{
return (string)obj.GetValue(SelectedTextProperty);
}

public static void SetSelectedText(DependencyObject obj, string value)
{
obj.SetValue(SelectedTextProperty, value);
}

// Using a DependencyProperty as the backing store for SelectedText. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedTextProperty =
DependencyProperty.RegisterAttached(
"SelectedText",
typeof(string),
typeof(TextBoxHelper),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, SelectedTextChanged));

private static void SelectedTextChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
TextBox tb = obj as TextBox;
if (tb != null)
{
if (e.OldValue == null && e.NewValue != null)
{
tb.SelectionChanged += tb_SelectionChanged;
}
else if (e.OldValue != null && e.NewValue == null)
{
tb.SelectionChanged -= tb_SelectionChanged;
}

string newValue = e.NewValue as string;

if (newValue != null && newValue != tb.SelectedText)
{
tb.SelectedText = newValue as string;
}
}
}

static void tb_SelectionChanged(object sender, RoutedEventArgs e)
{
TextBox tb = sender as TextBox;
if (tb != null)
{
SetSelectedText(tb, tb.SelectedText);
}
}

}

然后,您可以像在 XAML 中那样使用它:
<TextBox Text="{Binding Message}" u:TextBoxHelper.SelectedText="{Binding SelectedText}" />

关于wpf - MVVM 和 TextBox 的 SelectedText 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2245928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com