Xamarin.forms Xamarin绑定DataContext对象路径=。部队更新
我有一个viewmodel,具有如下两个属性:Xamarin.forms Xamarin绑定DataContext对象路径=。部队更新,xamarin.forms,label,converter,datacontext,Xamarin.forms,Label,Converter,Datacontext,我有一个viewmodel,具有如下两个属性: public class MyViewModel : INotifyPropertyChanged { protected string _aaa; protected string _bbb; public string AAA { get { return _aaa; } set { _aaa = value; Ra
public class MyViewModel : INotifyPropertyChanged
{
protected string _aaa;
protected string _bbb;
public string AAA
{
get { return _aaa; }
set
{
_aaa = value;
RaisePropertyChanged(nameof(AAA));
}
}
public string BBB
{
get { return _bbb; }
set
{
_bbb = value;
RaisePropertyChanged(nameof(BBB));
}
}
/// etc.…..
}
我还有一个视图,其BidingContext是MyViewModel类型的对象:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Grid.Row="0" x:Name="Label1" Text="{Binding AAA}" />
<Label Grid.Row="1" x:Name="Label2" Text="{Binding Path=. , Converter={StaticResource MyConverter}}" />
</Grid>
转换器使用属性AAA和BBB返回字符串值
初始化时一切正常。当AAA属性更改时,label1相应地更改其值,但是如果AAA或BBB更改,我需要强制Label2通过调用转换器来更新其值。但是由于绑定是直接使用datacontext(Path=)完成的,而不是它的一个属性,因此它实际上从不更新它的文本属性
有人知道如何解决我的pb吗?
提前感谢您的帮助。在视图模型中添加一个属性,比如说
Self
,该属性返回对其自身实例的引用;并确保在更新AAA
或BBB
时引发相同的属性更改事件
public class MyViewModel : INotifyPropertyChanged
{
protected string _aaa;
protected string _bbb;
public string AAA
{
get { return _aaa; }
set
{
_aaa = value;
RaisePropertyChanged(nameof(AAA));
RaisePropertyChanged(nameof(Self));
}
}
public string BBB
{
get { return _bbb; }
set
{
_bbb = value;
RaisePropertyChanged(nameof(BBB));
RaisePropertyChanged(nameof(Self));
}
}
public MyViewModel Self
{
get { return this; }
}
/// etc.…..
}
现在,您可以将XAML更改为以下内容:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Grid.Row="0" x:Name="Label1" Text="{Binding AAA}" />
<Label Grid.Row="1" x:Name="Label2" Text="{Binding Path=Self, Converter={StaticResource MyConverter}}" />
</Grid>
转换器的作用是什么?如果只是格式化字符串,我建议放置另一个字符串属性来创建所需的字符串,当AAA
或BBB
更改时,您也可以RaisePropertyChanged
对该属性进行更改。感谢您的回复,但我考虑了这个解决方案,但是我需要使用转换器更新Label2值。有没有办法强制label2更新其在Xamarin中的值?我不确定有什么方法可以在ViewModel实例上提升属性更改。如果可能的话,我建议尝试使用单独的财产。如果这不可能,我不知道如何让Label2
正确更新..我不确定您想做什么。。。要重新设置它,您可以通过执行BindingContext=this再次设置BindingContext
代码>但这将再次绑定所有内容。所以做得太多可能会导致性能问题。谢谢大家的建议。我想可能会使用UpdateSourceEventName,但我没有找到很多关于它的文档@艾达,我会试试你的建议,谢谢。我做完了就告诉你。