在我看来,我有一个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”的属性之间的绑定?
答案 0 :(得分:0)
在TextBlock
属性的source属性的setter中设置SelectedRec
的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;
}
}
}
另请注意,您应该绑定到 SelectedItem
的{{1}}或SelectedValue
属性:
ComboBox
答案 1 :(得分: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();
}