セットアップ
したがってComputerItem
、特定のコンピューターについて知っておく必要のあるすべてのものを格納するように設計されたクラスがあります。これらのアイテムはに保存されますObservableCollection<ComputerItem>
。次に、カスタムコントロールComputerControl
があります。これには、(とりわけ)ComputerItemのメンバーにバインドされたいくつかのテキストボックスがあり、バインドは次のように使用可能になります。
<TextBlock Name="tb_computerName"TextWrapping="Wrap" Text="{Binding ElementName=ComputerControl1, Path=computerName}"/>
と背後のコードで
public static DependencyProperty computerNameProperty = DependencyProperty.Register("computerName", typeof(string), typeof(ComputerControl), null);
MultiselectList
次に、ComputerControlオブジェクトを作成します。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<toolkit:MultiselectList x:Name="lb_computers" IsSelectionEnabledChanged="lb_computers_IsSelectionEnabledChanged"> <!--SelectionChanged="lb_computers_SelectionChanged" >-->
<toolkit:MultiselectList.ItemTemplate>
<DataTemplate>
<StackPanel x:Name="sp">
<local:ComputerControl computerName="{Binding Name}" MACAddress="{Binding DisplayMAC}" playClicked="playClicked_Handler" editClicked="editClicked_Handler"/>
</StackPanel>
</DataTemplate>
</toolkit:MultiselectList.ItemTemplate>
</toolkit:MultiselectList>
</Grid>
ComputerControl定義でデータバインディングを確認できます。背後にあるコードで、ObservableCollectionをMultiselectListにバインドします。
this.lb_computers.ItemsSource = ComputerListMaintainer.GetList();
そして、これらすべて(およびここに含めるのを忘れていると確信しているいくつかのこと)は、ObservableCollection内のComputerItemsを表すComputerControlsでMultiselectListを埋めるために美しく機能します。
問題
私の問題は、基になるComputerItemが変更されたときに、対応するComputerControlのTextBlockが更新されないことです。INotifyPropertyChanged
ComputerItemクラスに実装しました:
public class ComputerItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string name;
protected virtual void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public string Name
{
get { return name; }
set { OnPropertyChanged("Name"); name = value; }
}
}
しかし、それは問題を解決しませんでした。ComputerControlと関係があるのではないかと思いますが、どこから探し始めればよいのかわかりません。私が見つけた最も近い質問は、INotifyPropertyChangedが解決策であるべきだと示唆しましたが、私が正しく覚えていれば、彼らはその場合はカスタムコントロールを使用せず、カスタムクラスのみを使用していました。
私は何が欠けていますか?