带有 ConverterParameter 的 UWP 多重绑定
UWP multibinding with ConverterParameter
我有以下 XAML 代码,我在其中将一些数据绑定到列表视图。另外,我有非常重要的 RecipientConverter
,它允许我转换我的 TextBlock。但是,问题来了。此 TextBlock 必须根据下面 TextBlock 中显示的形式进行转换 (Binding Path=Sum)。
所以,这是我的问题,是否可以将 "Sum" TextBlock 作为 ConverterParameter 发送到 RecipientConverter
?我知道 MultipleBinding
,但这只适用于 WPF,在 UWP 中不可用。也许这里有一种使用 DependencyProperty
实现它的方法,但我对此很确定。
注意:
"Recipient" TextBlock 和 "Sum" TextBlock 是我从服务器获取的动态值。
<ListView x:Name="HistoryList" Padding="10" IsItemClickEnabled="True" Visibility="Collapsed" ItemsSource="{Binding Source={StaticResource TransactionsCVS}}" ItemsPanel="{StaticResource ResourceKey=ItemsPanelTemplate}" ItemClick="HistoryList_ItemClick">
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate x:DataType="data:TransactionGroupInfo">
<TextBlock FontWeight="Medium" FontSize="16" Foreground="#999999" Text="{Binding Path=Key}" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:Transaction">
<Grid Height="60" Margin="0,5,0,5" Background="White" CornerRadius="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Background="{Binding Path=VendorAccentColor}" CornerRadius="5,0,0,5" />
<StackPanel VerticalAlignment="Center" Margin="10,0,0,0" Grid.Column="1" Orientation="Vertical">
<TextBlock Text="{Binding Path=VendorName}" FontSize="16" Foreground="#999999" />
<TextBlock Text="{Binding Path=Recipient, Converter={StaticResource RecipientConverter}}" FontSize="16" Foreground="#999999" />
</StackPanel>
<TextBlock Grid.Column="2" Text="{Binding Path=Sum, Converter={StaticResource SumConverter}}" VerticalAlignment="Center" Canvas.ZIndex="2" Margin="0,0,10,0" FontSize="18" FontWeight="Bold" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这是我的转换器的 C# 代码
public object Convert(object value, Type targetType, object parameter, string language)
{
string recipient = (string)value;
// Here is a way I want it to be
string sum = (string)parameter;
if (HalykWallet_v03.Model.AppSettings.GetAppLang() == "ru")
{
if (sum.Contains("-"))
return "На " + recipient;
else
return "От " + recipient;
}
else
{
char[] array = sum.ToCharArray();
if (sum.Contains("-"))
{
switch (array.Last())
{
case '0':
case '1':
case '2':
recipient += recipient + "-ден";
break;
case '3':
case '4':
case '5':
recipient += recipient + "-тен";
break;
case '6':
recipient += recipient + "-дан";
break;
case '7':
case '8':
recipient += recipient + "-ден";
break;
case '9':
recipient += recipient + "-дан";
break;
default:
break;
}
}
else
{
switch (array.Last())
{
case '0':
case '1':
case '2':
recipient += recipient + "-ге";
break;
case '3':
case '4':
case '5':
recipient += recipient + "-ке";
break;
case '6':
recipient += recipient + "-ға";
break;
case '7':
case '8':
recipient += recipient + "-ден";
break;
case '9':
recipient += recipient + "-ға";
break;
}
}
return recipient;
}
}
您好,请问您试过绑定为转换器参数吗?
<StackPanel VerticalAlignment="Center" Margin="10,0,0,0" Grid.Column="1" Orientation="Vertical">
<TextBlock Text="{Binding Path=VendorName}" FontSize="16" Foreground="#999999" />
<TextBlock Name="txtRecipient" Text="{Binding Path=Recipient, Converter={StaticResource RecipientConverter}}" FontSize="16" Foreground="#999999" />
</StackPanel>
<TextBlock Grid.Column="2" Text="{Binding Path=Sum, Converter={StaticResource SumConverter},ConverterParameter={Binding ElementName=txtrec}}" VerticalAlignment="Center" Canvas.ZIndex="2" Margin="0,0,10,0" FontSize="18" FontWeight="Bold" />
但是您可以使用 Cimbalino Windows phone 工具包在 UWP 中模拟多重绑定。看看here
您可以在转换器中使用依赖项 属性。This 应该有所帮助。
绑定而不是 x:bind 解决了我的问题。也许这会节省某人的一天。
我有以下 XAML 代码,我在其中将一些数据绑定到列表视图。另外,我有非常重要的 RecipientConverter
,它允许我转换我的 TextBlock。但是,问题来了。此 TextBlock 必须根据下面 TextBlock 中显示的形式进行转换 (Binding Path=Sum)。
所以,这是我的问题,是否可以将 "Sum" TextBlock 作为 ConverterParameter 发送到 RecipientConverter
?我知道 MultipleBinding
,但这只适用于 WPF,在 UWP 中不可用。也许这里有一种使用 DependencyProperty
实现它的方法,但我对此很确定。
注意: "Recipient" TextBlock 和 "Sum" TextBlock 是我从服务器获取的动态值。
<ListView x:Name="HistoryList" Padding="10" IsItemClickEnabled="True" Visibility="Collapsed" ItemsSource="{Binding Source={StaticResource TransactionsCVS}}" ItemsPanel="{StaticResource ResourceKey=ItemsPanelTemplate}" ItemClick="HistoryList_ItemClick">
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate x:DataType="data:TransactionGroupInfo">
<TextBlock FontWeight="Medium" FontSize="16" Foreground="#999999" Text="{Binding Path=Key}" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:Transaction">
<Grid Height="60" Margin="0,5,0,5" Background="White" CornerRadius="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Background="{Binding Path=VendorAccentColor}" CornerRadius="5,0,0,5" />
<StackPanel VerticalAlignment="Center" Margin="10,0,0,0" Grid.Column="1" Orientation="Vertical">
<TextBlock Text="{Binding Path=VendorName}" FontSize="16" Foreground="#999999" />
<TextBlock Text="{Binding Path=Recipient, Converter={StaticResource RecipientConverter}}" FontSize="16" Foreground="#999999" />
</StackPanel>
<TextBlock Grid.Column="2" Text="{Binding Path=Sum, Converter={StaticResource SumConverter}}" VerticalAlignment="Center" Canvas.ZIndex="2" Margin="0,0,10,0" FontSize="18" FontWeight="Bold" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这是我的转换器的 C# 代码
public object Convert(object value, Type targetType, object parameter, string language)
{
string recipient = (string)value;
// Here is a way I want it to be
string sum = (string)parameter;
if (HalykWallet_v03.Model.AppSettings.GetAppLang() == "ru")
{
if (sum.Contains("-"))
return "На " + recipient;
else
return "От " + recipient;
}
else
{
char[] array = sum.ToCharArray();
if (sum.Contains("-"))
{
switch (array.Last())
{
case '0':
case '1':
case '2':
recipient += recipient + "-ден";
break;
case '3':
case '4':
case '5':
recipient += recipient + "-тен";
break;
case '6':
recipient += recipient + "-дан";
break;
case '7':
case '8':
recipient += recipient + "-ден";
break;
case '9':
recipient += recipient + "-дан";
break;
default:
break;
}
}
else
{
switch (array.Last())
{
case '0':
case '1':
case '2':
recipient += recipient + "-ге";
break;
case '3':
case '4':
case '5':
recipient += recipient + "-ке";
break;
case '6':
recipient += recipient + "-ға";
break;
case '7':
case '8':
recipient += recipient + "-ден";
break;
case '9':
recipient += recipient + "-ға";
break;
}
}
return recipient;
}
}
您好,请问您试过绑定为转换器参数吗?
<StackPanel VerticalAlignment="Center" Margin="10,0,0,0" Grid.Column="1" Orientation="Vertical">
<TextBlock Text="{Binding Path=VendorName}" FontSize="16" Foreground="#999999" />
<TextBlock Name="txtRecipient" Text="{Binding Path=Recipient, Converter={StaticResource RecipientConverter}}" FontSize="16" Foreground="#999999" />
</StackPanel>
<TextBlock Grid.Column="2" Text="{Binding Path=Sum, Converter={StaticResource SumConverter},ConverterParameter={Binding ElementName=txtrec}}" VerticalAlignment="Center" Canvas.ZIndex="2" Margin="0,0,10,0" FontSize="18" FontWeight="Bold" />
但是您可以使用 Cimbalino Windows phone 工具包在 UWP 中模拟多重绑定。看看here
您可以在转换器中使用依赖项 属性。This 应该有所帮助。
绑定而不是 x:bind 解决了我的问题。也许这会节省某人的一天。