首页 文章

在运行时更改/切换WPF文本框的Text dataBinding

提问于
浏览
0

在我看来,我有一个Combobox和一个TextBlock . TextBlock通过FormLoad上名为“MyViewModel”的ViewModel在XAML中的Text属性上设置的DataBinding来接收值 .

Combobox有一个ItemSource和一个SelectedItem,它们被绑定到同一个ViewModel中的属性,即“MyViewModel”

现在,当我从视图中更改Combobox的选择时,我希望在TextBlock中设置Combobox的SelectedItem对象的成员 .

我怎么能这样做?即有什么方法我可以根据我在运行时的情况以某种方式将TextBlock的Text的DataBinding属性更改/切换到“MyViewModel”的不同源/属性?或者如何最好地解决这个问题?

public class AllTexts
{
   public int ID {get;set;}
   public string Text1{get;set;}
   public string Text2{get;set;}
}

public class MyViewModel:INotifyPropertyChanged//Assume the interface has been implemented.
{
   private string p_Text1;
   private AllTexts p_SelectedRec;
   public string Text1
   {
    get{return p_Text1;}
   }
   set
   {  if(p_Text1!=value)
    {
        p_Text1=value;
        RaisePropertyChanged("Text1");
    }
   }
   public List<AllTexts> ALT;

   public AllTexts SelectedRec
      {
        get{return p_SelectedRec;}
      }
      set
      {  if(p_SelectedRec!=value)
        {
            p_SelectedRec=value;
            RaisePropertyChanged("SelectedRec");
        }
   }

   public MyViewModel()
   {
      ALT=new List<AllTexts>();//Assume this List gets populated
   }
}

MainWindow.Xaml(查看)

<ComboBox x:Name="cmbSelectText" ItemsSource="{Binding ALT}" DisplayMemberPath="Id" SelectedValuePath="Id" SelectedItem="{Binding SelectedRec}"  SelectedValue="{Binding SelectedRec.Id,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

<TextBlock x:Name="txtTextSpecimen"  Text="{Binding Text1,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

如何在运行时更改/切换Combox的SelectedItem的名为“Text2”的属性和ViewModel的名为“Text1”的属性之间的绑定?

2 回答

  • 0

    XAML:

    <ComboBox SelectedItem="{Binding SelectedText}" HorizontalAlignment="Left" Margin="50,65,0,0" VerticalAlignment="Top" Width="120" />
        <TextBlock Text="{Binding SelectedText}" HorizontalAlignment="Left" Margin="56,108,0,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
    

    C#:

    private string _SelectedText;
    
        public string SelectedText
        {
            get { return _SelectedText; }
            set { _SelectedText = value; OnPropertyChanged("SelectedText"); }
        }
    
        public MainWindow()
        {
            InitializeComponent();
        }
    
  • 0

    SelectedRec 属性的source属性的setter中设置 TextBlock 的source属性,例如:

    public AllTexts SelectedRec
    {
        get { return p_SelectedRec; }
        set
        {
            if (p_SelectedRec != value)
            {
                p_SelectedRec = value;
                RaisePropertyChanged("SelectedRec");
                if (p_SelectedRec != null)
                    Text1 = p_SelectedRec.SomeStringPropertyOfTheAllTextsClass;
            }
        }
    }
    

    另请注意,您应该绑定到 ComboBoxSelectedItemSelectedValue 属性:

    <ComboBox x:Name="cmbSelectText" ItemsSource="{Binding ALT}" DisplayMemberPath="Id" SelectedItem="{Binding SelectedRec}" />
    

相关问题