簡體   English   中英

更改數據模板中的綁定對象

[英]changing the bound object in a datatemplate

數據模板很棒,但是在特定情況下綁定存在問題。 我有一個Value類,它具有StringValueDateValue等各種后代。這些值顯示在Listbox 此模板可以正常工作,並綁定到StringValue的特定屬性:

<DataTemplate DataType="{x:Type values:StringValue}">
    <TextBox Margin="0.5"
             Text="{Binding Path=Native}" />
</DataTemplate>

但是,當我綁定到對象本身而不是特定屬性時,更改不會更新該對象,如以下模板所示:

<DataTemplate DataType="{x:Type values:LookupValue}">
    <qp:IncrementalLookupBox SelectedValue="{Binding Path=., Mode=TwoWay}"
         LookupProvider="{Binding ElementName=EditWindow, Path=ViewModel.LookupProvider}">
    </qp:IncrementalLookupBox>
</DataTemplate>

IncrementalLookupBox是一個UserControl ,它最終允許用戶選擇LookupValue ,它應該替換模板中綁定的項目。 如果將其綁定到一個簡單的類型(例如int或字符串),則該綁定將替換該對象,因此我不確定更復雜的對象有什么區別。 我知道IncrementalLookBox可以正常工作,因為將某些文本框綁定到SelectedValue的屬性(這是一個依賴屬性)會顯示正確選擇的LookupValue

如果情況變得更加清楚,這里是SelectedValue的實現:

    public LookupValue SelectedValue
    {
        get { return (LookupValue)GetValue(SelectedValueProperty); }
        set { SetValue(SelectedValueProperty, value); }
    }

    // Using a DependencyProperty as the backing store for SelectedValue.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty SelectedValueProperty =
        DependencyProperty.Register("SelectedValue", typeof(LookupValue), typeof(IncrementalLookupBox), new PropertyMetadata(OnSelectedValuePropertyChanged));

    private static void OnSelectedValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var obj = d as IncrementalLookupBox;
        obj.OnSelectedValuePropertyChanged(e);
    }

    private void OnSelectedValuePropertyChanged(DependencyPropertyChangedEventArgs e)
    {
        CheckForSelectedValueInLookups();
    }

如果所有其他方法均失敗,請考慮使用ValueConverter來獲取所需的值。

編輯:這不起作用。 請參閱下面評論中的鏈接。

確保您的類實現了INotifyPropertyChanged並在此處引發PropertyChanaged:

 private void OnSelectedValuePropertyChanged(DependencyPropertyChangedEventArgs e)
 {
     CheckForSelectedValueInLookups();
     // RaisePropertyChanged();
 }

我的問題與此處描述的相同:

WPF使用DataTemplate的ListBox雙向綁定

顯然,如果我在此處輸入的文字不夠多,我的答案將被轉換為評論,而無法解決問題。 因此,總而言之,使用雙向Binding =。 在ListBox(或任何ItemsControl I圖像)中使用的數據模板中,它將不起作用,因為它不是綁定的對象本身,而是包含它的ListBoxItem。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM