我有一个网格,重复的列具有相同的样式,但名称不同,名称对我来说很重要,因此我决定创建一个模板来重复元素并从XML文件中读取名称但我发现我可以不使用绑定名称属性请帮助我sooooooooooooooooooooooooooon
这是我的代码的一部分:
<DataTemplate x:Key="weekItemTemplate">
<Gridx:Name="{Binding XPath=Container}" Style="{DynamicResource GridStyle}">
<Grid.RowDefinitions>
<RowDefinition Height="0.9*"/>
<RowDefinition Height="0.1*"/>
</Grid.RowDefinitions>
<Rectangle x:Name="Rectangle" Grid.Row="0" Margin="0,0,0,0.063"/>
<TextBlock x:Name="Christian" HorizontalAlignment="Left" Width="18.52" Grid.Row="1" Margin="1,0,0,0"><Run Text="08"/></TextBlock>
<TextBlock x:Name="Hejri" Grid.Row="1" HorizontalAlignment="Right" Width="9.773" Margin="0,0,0,0"><Run Text="۰۱"/></TextBlock>
<TextBlock x:Name="Persian" Margin="1,0,0,0" HorizontalAlignment="Left" Width="10"><Run Text="۰"/></TextBlock>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid Margin="0,10,0,0">
<Grid.DataContext>
<XmlDataProvider x:Name="TeamData" Source="weekdays.xml" XPath="days/day" />
</Grid.DataContext>
<ListView x:Name="TeamsListBox" DockPanel.Dock="Left"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource weekItemTemplate}"
IsSynchronizedWithCurrentItem="True"
Visibility="Visible" SelectionMode="Single" />
答案 0 :(得分:1)
再次考虑之后,您可以为列定义新的附加属性,并将您的名称从XML文件绑定到此属性。然后在您的代码中,您可以访问此附加属性而不是name属性。这有帮助吗?!
修改强>
我在谈论attached dependency property。像这样:
public static class ColumnProps
{
public static readonly DependencyProperty MyCustomNameProperty =
DependencyProperty.RegisterAttached(
"MyCustomName",
typeof(string),
typeof(ColumnProps)
);
public static void SetMyCustomName(DependencyObject obj, string newValue)
{
obj.SetValue(MyCustomNameProperty, newValue);
}
public static string GetMyCustomName(DependencyObject obj)
{
return (string)obj.GetValue(MyCustomNameProperty);
}
}
然后,您可以在网格上设置此属性,如下所示:
<Grid xmlns:local="...">
<Grid.ColumnDefinitions>
<ColumnDefinition local:ColumnProps.MyCustomName="someName" Width="100"/>
<!-- ... -->
</Grid.ColumnDefinitions>
<!-- ... -->
</Grid>
其中xmlns:local
应该引用定义ColumnProps
类型的程序集和命名空间。
答案 1 :(得分:0)
您无法绑定到name属性(因此在运行时更改它),因为它在生成的代码(BAML和生成的代码隐藏)中用作字段名称。
答案 2 :(得分:0)
代码隐藏希望名称可以静态解析。也就是说,如果名称真的是动态的,那么在所有情况下如何编写依赖于名称的代码?也许有一种方法可以修改设计,这样您就不需要直接访问weekItem视图,而是可以使用一个模拟weekItem视图行为方式的类。例如,如果您需要注册事件或设置某些属性,您可以使用Command绑定到'WeekItemViewModel'类,并公开反映您希望视图传达的属性。
执行此操作后,您已消除了对特定名称的依赖性,这意味着您可以动态加载数据并实例化这些WeekItemViewModel类,从而使您无需了解视图实际布局的详细信息。您的代码可以更多地关注它想要如何进行交互,而不是关注如何将代码隐藏到特定的视觉效果。