嘿尴尬我从找到的例子中无法获得双向约束。这是我的一个dataTemplates。
<local:ChatRoomTemplateSelector.YourSelf>
<DataTemplate x:Name="YourSelf">
<StackPanel>
<Grid x:Name="YourSelfGrid">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<UserControl Grid.Row="0">
<Path Data="" Fill="LawnGreen" StrokeThickness="0" Stretch="Fill" UseLayoutRounding="True"/>
</UserControl>
<TextBox Text="{Binding Path=Post}" IsReadOnly="{Binding readOnly}" FontSize="20" Margin="39,10" TextWrapping="Wrap" TextAlignment="Center"/>
</Grid>
<StackPanel Orientation="Horizontal">
<Path Data="" Fill="LawnGreen" StrokeThickness="0" Stretch="Fill" UseLayoutRounding="True" Margin="50,-1,0,0"/>
<TextBlock Text="{Binding Name}" FontWeight="Bold" FontSize="25" TextWrapping="Wrap"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</local:ChatRoomTemplateSelector.YourSelf>
我需要双向绑定的元素是Text =“{Binding Path = Post}”。但无法让它发挥作用。我拥有的longlistselector,其itemsource设置为:
System.Collections.ObjectModel.ObservableCollection<Data> source = new System.Collections.ObjectModel.ObservableCollection<Data>();
然后将此源设置为我的Longlistselectors项目源。
Data类的位置是:
public class Data : INotifyPropertyChanged
{
public string Name
{
get;
set;
}
private string _dl;
public string Post
{
get { return _dl; }
set
{
if (value != _dl)
{
_dl = value;
NotifyPropertyChanged("Post");
}
}
}
public string User
{
get;
set;
}
public bool readOnly
{
get;
set;
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
这是我尝试过但没有成功。希望你能帮助我进行调整,让我在数据中为发布提供双向绑定。
额外信息
我现在尝试了模式= TwoWay,最后得到了它。代码已更新。
但现在更新只发生在失去焦点上。但是我需要在插入文本时更新变量。
所以我需要设置UpdateSourceTrigger。
但这应该是什么?
解决方案
<TextBox TextChanged="OnTextBoxTextChanged"
Text="{Binding MyText, Mode=TwoWay,
UpdateSourceTrigger=Explicit}" />
UpdateSourceTrigger =明确是一个明智的奖金。它是什么?显式:仅在调用UpdateSource方法时更新绑定源。当用户离开TextBox时,它会为您节省一个额外的绑定集。
在C#中:
private void OnTextBoxTextChanged( object sender, TextChangedEventArgs e )
{
TextBox textBox = sender as TextBox;
// Update the binding source
BindingExpression bindingExpr = textBox.GetBindingExpression( TextBox.TextProperty );
bindingExpr.UpdateSource();
}:
答案 0 :(得分:0)
如果您希望TextBox被双向绑定,那么您应该使用Text="{Binding Path=Post,Mode=TwoWay}"
Windows手机不支持UpdateSourceTrigger=PropertyChanged
但你可以找到办法here。
或者另一种方法是使用Prism库中的UpdateTextBindingOnPropertyChanged。您可以下载我链接的文件的源代码,并在xaml中将其设置为:
<TextBox ...>
<i:Interaction.Behaviors>
<prism:UpdateTextBindingOnPropertyChanged/>
</i:Interaction.Behaviors>
</TextBox>