{X:bind}
的{{3}}提到可以在属性路径中进行投射(例如,提及{x:Bind obj.(TextBox.Text)}
)。在下面的简单示例中,我无法看到它应该如何工作。我在parens中尝试了各种类型名称组合,但没有成功。
一个常见的用例是组合框的双向绑定,这里我将SelectedValue
属性从通用对象类型转换为更具体的类型。
示例xaml页面 MainPage.xaml :
<Page
x:Class="XBindTest4.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XBindTest4"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" >
<StackPanel>
<ComboBox ItemsSource="{x:Bind SampleList, Mode=OneWay}"
SelectedValue="{x:Bind SampleData, Mode=TwoWay}"/>
</StackPanel>
</Page>
MainPage.xaml.cs 后面的代码:
using System.Collections.ObjectModel;
using Windows.UI.Xaml.Controls;
namespace XBindTest4 {
public class SampleClass {
}
public sealed partial class MainPage : Page {
public ObservableCollection<SampleClass> SampleList = new ObservableCollection<SampleClass>(new[] {
new SampleClass(),
new SampleClass()
});
public SampleClass SampleData { get; set; }
public MainPage() {
this.InitializeComponent();
}
}
}
答案 0 :(得分:2)
目前,现有的语法可能性无法做到这一点。这很糟糕,因为它为绑定表达式添加了不必要的重复代码:在这种情况下使用<button class="navbutton" onclick="window.location='addevent.aspx';">Add Event</button>
,必须指定转换器,即使它什么都不做。
TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String networkOperator = tel.getNetworkOperator();
if (networkOperator != null) {
int mcc = Integer.parseInt(networkOperator.substring(0, 3));
int mnc = Integer.parseInt(networkOperator.substring(3));
}
如果使用转换器,则将适当的强制转换插入到生成的文件 MainPage.g.cs 中:
{x:Bind}
其他来源:
NoOpConverter.cs :
...
SelectedValue="{x:Bind SampleData, Mode=TwoWay, Converter={StaticResource NoOpConverter}}
...
在 App.xaml 中注册转换器:
this.dataRoot.SampleData = (global::XBindTest4.SampleClass)this.LookupConverter("NoOpConverter").ConvertBack((this.obj2).SelectedValue, typeof(global::XBindTest4.SampleClass), null, null);
MainPage.xaml.cs中:
using System;
using Windows.UI.Xaml.Data;
namespace XBindTest4 {
public class NoOpConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, string language)
=> value;
public object ConvertBack(object value, Type targetType, object parameter, string language)
=> value;
}
}