ディクショナリで定義されているデータテンプレートに要素をバインドしようとしています。簡単にしましょう。
簡単なクラスがあります
public class A { public string Data {get;set} }
ListBoxを含む単純なビューがあり、ItemSourcesはクラスAのリストです。
<ListBox ItemsSource="{Binding AList}">
重要なのは、Itemplateをビューで直接定義すると、バインドが機能することです。
<ListBox.ItemTemplate>
<DataTemplate >
<TextBlock Text="{Binding Data}" />
<Rectangle Fill="Red" Height="10" Width="10"/>
</DataTemplate>
</ListBox.ItemTemplate>
これはうまくいきます。
しかし、このItemTemplateをリソースディクショナリで定義すると、バインディングが機能しませんか?
どうやってやるの ?
PS:これは私の問題を説明する簡単な例です。toString関数をオーバーライドして機能させたり、classeテンプレートを使用したりするように言わないでください。私の実際のケースは、これよりも非常に複雑です。
手伝ってくれてありがとう
新しいDictionary1.xamlを作成します
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="dataTemplate">
<StackPanel>
<TextBlock Text="{Binding Data}" />
<Rectangle Fill="Red" Height="10" Width="10"/>
</StackPanel>
</DataTemplate>
</ResourceDictionary>
MainWindow.xamlでそれを参照してください
<Window.Resources>
<ResourceDictionary Source="Dictionary1.xaml" />
</Window.Resources>
<ListBox Name="lst" ItemTemplate="{StaticResource dataTemplate}"></ListBox>
MainWindow.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
var observable = new ObservableCollection<Test>();
observable.Add(new Test("A"));
observable.Add(new Test("B"));
observable.Add(new Test("C"));
this.lst.ItemsSource = observable;
}
}
public class Test
{
public Test(string dateTime)
{
this.Data = dateTime;
}
public string Data { get; set; }
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加