私は自分のUI上にlistBoxを持ち、viewmodelにバッキングコレクションを持っています。 新しいアイテムがコレクションに追加された場合、新しいユーザーコントロールがUIに追加されるようにdatabind/datatemplateしようとしています。しかし、私はこれを完全に動作させることはできません。 明確にするために、コレクション内の項目数に対してUIに表示するコントロールの数を正しく設定できますが、ユーザーコントロールのプロパティをコレクション内の項目にバインドすることはできません。 これは、私だけは、私は今、この問題を持っていることを、おそらく良い、その後に、これは非常に、より複雑にするために、最初はそれを理解しようとしています。..WPF UserControlコレクションへのバインド
データバインドWPFコード:UserControlから
<ListBox x:Name="SubSystemList" ItemsSource="{Binding Path=SubSystems}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type src:SubSystem}">
<controls:SubSystem DeviceCount="{Binding Path=DeviceCount}" SystemName="{Binding Path=Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
プロパティ私はにレンダリングしようとしていること:
public string SystemName
{
get { return (string) GetValue(SubSystenNameProperty); }
set { SetValue(SubSystenNameProperty, value); }
}
public int DeviceCount
{
get { return (int) GetValue(DeviceCountProperty); }
set { SetValue(DeviceCountProperty, value); }
}
私は(すぐに...)はるかにコードを投稿するには消極的だ、それが唯一従うことがより困難になるなど。 セッター内のデバッグWriteLineは起動しません(ブレークポイントはヒットしません)。私はそれをパス/バインディングの問題と考えています。
ご協力いただければ幸いです。
EDIT SRC:サブシステム・コード:ユーザーコントロール上の(明確にするために追加のプロパティを除去)
public class SubSystem
{
[XmlAttribute("Name")]
[DataMember]
public string Name
{
get { return _name; }
set { _name = value; }
}
[DataMember]
public int DeviceCount
{
get { return _deviceCount; }
set { _deviceCount = value; }
}
}
DependencyProperties:サブシステム
public static readonly DependencyProperty DeviceCountProperty = DependencyProperty.Register(
nameof(DeviceCount), typeof(int), typeof(SubSystem));
public static readonly DependencyProperty SubSystenNameProperty = DependencyProperty.Register(
nameof(SystemName), typeof(string), typeof(SubSystem));
他編集
またヘッド傷これを明らかにした出力ログに:
em.Windows.Data Error: 40 : BindingExpression path error: 'SystemName' property not found on 'object' ''SubSystem' (HashCode=32985660)'. BindingExpression:Path=SystemName; DataItem='SubSystem' (HashCode=32985660); target element is 'TextBox' (Name=''); target property is 'Text' (type 'String')
は私が考えさせる
はそれが好きdoesntの背後にあるユーザーコントロールのコードで何が起こって何か/バインディングを、theresの面白いことですが、私は混乱した後、私はsubsystemcontrolに、ユーザーコントロールの名前を変更uc内のすべてのバインディング名が正しいことを確認しました。なぜこのことを全面的にやっているのかは分かりません。
に置き換えしかし、DeviceCountとのSystemNameたDependencyPropertyはありますかする必要がありますかそれらをUIにバインドする場合は、Dependecy Propertiesとして定義する必要があります。 msdn:https://msdn.microsoft.com/en-us/library/ms752914(v=vs.100).aspx – CiccioRocca
コントロールを参照してください.SubSystemは、SystemNameとDeviceCountを変更できるようにする必要があります。その後、UIから変更する必要があります。値を変更することなく、セッターでヒットすることはありません。修正してチェックしていますか? – CarbineCoder
@ciccioroccaプロパティは間違いなくDependencyPropertiesです。これは私の最初の頭のスクラッチャーでした。 –