public sealed partial class MainPage : Page
{
//public static dynamic resource;
public ResourceModel vm = new ResourceModel();
public MainPage()
{
this.InitializeComponent();
}
}
public class ResourceModel
{
private Dictionary<string, string> _resource;
public Dictionary<string, string> Resource
{
get { return _resource; }
set
{
_resource=Value;
}
}
}
Xaml代码
<TextBlock Text="{Binding vm.Resource[Account] ,Mode=TwoWay}" FontSize="15" Margin="10 0 30 0" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Center" Grid.Row="1" Grid.Column="0"></TextBlock>
描述 我想从没有DataContext和Textblock的Name的ResourceModel绑定我的textblock。只有我需要使用属性Name绑定。
答案 0 :(得分:0)
有几个地方你错过了。以下是关于em的一些信息:
Binding
正在搜索不可用的数据上下文。如果您没有viewmodel
,并且想要使用旧版binding
将UI元素绑定到后面的代码,则需要在DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}"
代码中添加<Page>
xaml
。这将告诉绑定引擎您绑定到后面的代码。 properties
,因为字段没有get
和set
。因此,在您的代码后面vm
是一个字段,而不是一个属性。将其更改为public ResourceModel vm { get; set; } = new ResourceModel();
,它将开始工作。 话虽如此,有三种方法可以解决这个问题:
binding
代码隐藏:在<page>
标记中添加DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}"
以告知绑定引擎您将绑定到后面的代码。
您的textblock
代码如下所示:
<TextBlock Text="{Binding vm.Resource[Account]}"/>
我不明白为什么Mode
设置为two way
,因为它是Textblock
且不可编辑,遗留binding
默认为oneWay
}。
binding
与ResourceModel
另一种方法是将textblock
的数据上下文设置为直接绑定到Model。下面是代码:
<TextBlock Text="{Binding Resource[Account]}">
<TextBlock.DataContext>
<local:ResourceModel/>
</TextBlock.DataContext>
</TextBlock>
x:bind
作为绑定背后的代码默认情况下x:bind
绑定到后面的代码,因此您可以使用x:bind
而不是绑定。您使用x:bind
时遇到的问题是因为在使用x:bind时无法在xaml中设置密钥。使用转换器,然后传入您的密钥作为转换器参数,它们都将开始工作正常。如果你打算在下面使用它,那就是xaml代码:
<TextBlock Text="{x:Bind vm.Resource,Converter={StaticResource DictionaryValueFetcher},ConverterParameter='account'}"/>