C# 基于单选按钮选择在文本框上切换绑定
场景是,我有三个单选按钮,每个按钮对应于函数的不同计算方式。我有一个文本框,用户可以在其中输入值,我希望该值与输入值时选择的单选按钮关联。在代码隐藏中,我有三个变量(每种类型的值一个),我当前维护数据的方式是每次触发选中或未选中事件时,我都将正确的值加载到文本框中,并将旧值存储在正确的变量中。值得注意的是,所有三个变量都是相同的类型(字符串) 我知道这不是最好的方法,所以我想知道是否有办法将文本框绑定到所有变量,并根据选择的单选按钮显示正确的值。我有一个预感,它涉及到使用数据转换器的多重绑定,但我不确定如何给数据转换器状态信息,以决定显示哪个值或需要将旧值存储到哪个变量(我可以切换到数组,但我仍然需要能够在转换器中获得radiobox选择)。如果你能给我一些关于如何做这件事的指导,那就太好了。如果不清楚我是否在WPF应用程序上使用C#/Xaml 我现在拥有的一些片段 未检查事件示例C# 基于单选按钮选择在文本框上切换绑定,c#,wpf,C#,Wpf,场景是,我有三个单选按钮,每个按钮对应于函数的不同计算方式。我有一个文本框,用户可以在其中输入值,我希望该值与输入值时选择的单选按钮关联。在代码隐藏中,我有三个变量(每种类型的值一个),我当前维护数据的方式是每次触发选中或未选中事件时,我都将正确的值加载到文本框中,并将旧值存储在正确的变量中。值得注意的是,所有三个变量都是相同的类型(字符串) 我知道这不是最好的方法,所以我想知道是否有办法将文本框绑定到所有变量,并根据选择的单选按钮显示正确的值。我有一个预感,它涉及到使用数据转换器的多重绑定,但
private void Fixed_Unchecked(object sender, RoutedEventArgs e)
{
if (Value != null)
{
LastFixedValue = Value.Text;
}
}
private void Fixed_Checked(object sender, RoutedEventArgs e)
{
if (PercentSign != null)
{
PercentSign.Visibility = Visibility.Hidden;
}
if (Value != null)
{
Value.IsReadOnly = false;
Value.Text = LastFixedValue;
Value.Background = Brushes.White;
}
}
抽样检查事件
private void Fixed_Unchecked(object sender, RoutedEventArgs e)
{
if (Value != null)
{
LastFixedValue = Value.Text;
}
}
private void Fixed_Checked(object sender, RoutedEventArgs e)
{
if (PercentSign != null)
{
PercentSign.Visibility = Visibility.Hidden;
}
if (Value != null)
{
Value.IsReadOnly = false;
Value.Text = LastFixedValue;
Value.Background = Brushes.White;
}
}
我仍然需要一些选中/未选中的事件来处理ui更改,但我希望减少代码量并正确处理绑定如果我正确理解您的需求,我的解决方案如下:
public class MyViewModel : INotifyPropertyChanged
{
public Dictionary<string, string> AvailableItems { get; set; }
private string _selectedItem;
public string SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
RaisePropertyChanged("SomeValue");
RaisePropertyChanged("Value"); // Notify Value it has changed too
}
}
public string Value
{
get { return AvailableItems[SelectedItem]; }
set { AvailableItems[SelectedItem] = value; }
}
public MyViewModel()
{
AvailableItems = new Dictionary<string, string>();
AvailableItems.Add("Fixed", string.Empty);
AvailableItems.Add("Percent", string.Empty);
AvailableItems.Add("Variable", string.Empty);
SelectedItem = AvailableItems[0];
}
}
这将在字典中维护每个文本值,每个项目的键是关联的RadioButton文本。如果需要,它也很容易扩展或更改。发布一些片段可能会给您带来更好的效果response@un-幸运的是,感谢您的建议,我在关于此解决方案的问题1中添加了一个事件方法示例,当其中一个单选按钮被选中时,我想禁用并重新激活use输入值的文本框。使用列表框而不是组合在一起的一组单选按钮,是否仍然可以通过事件或其他方式实现此功能?@user3634149我将使用
设置一些数据触发器,以根据SelectedItem的值格式化文本框。网上应该有很多这样做的例子,但是如果你被卡住了,请告诉我,我可以给你写一些。