0

Bindingに 2 つの のうちの1 つを設定しようとしています (ListBoxItemsSourceグループでの選択に基づいてRadioButton)。

私が今持っているものは次のとおりです。

<ListBox>
    <ListBox.Resources>
        <Binding x:Key="AllBinding" Path="ItemsSource.AllLeaves" ElementName="EmployeeTree" />
        <Binding x:Key="FolderBinding" Path="SelectedItem.Leaves" ElementName="EmployeeTree" />
    </ListBox.Resources>
</ListBox>

ItemsSource次に、ユーザーの選択に基づいて、どちらか一方を に設定するのが理想的です。

Bindingしかし、両方の sでこのエラーが発生します。

タイプ 'DictionaryEntry' の 'Value' プロパティに 'Binding' を設定することはできません。「Binding」は、DependencyObject の DependencyProperty でのみ設定できます。

この要件をどのように実装できますか? sを定義しBindingて、コードビハインドからスワップインおよびスワップアウトすることもできますか?

4

2 に答える 2

2

TreeView.ItemsSource一部の選択した項目に基づいて設定しようとしているようですListBox

この場合、またはに基づいてDataTriggerそのEmployeeTreeセットに a を記述する必要があります。TreeView.ItemsSourceListBox.SelectedItemListBox.SelectedIndex

<Style x:Key="EmployeeTreeStyle" TargetType="{x:Type TreeView}">
    <!-- By default bind to MyListBox.SelectedItem.Leaves -->
    <Setter Property="ItemsSource" Value="{Binding ElementName=MyListBox, Path=SelectedItem.Leaves}" />
    <Style.Triggers>
        <!-- If SelectedIndex = 0, bind to AllLeaves instead -->
        <DataTrigger Binding="{Binding ElementName=MyListBox, Path=SelectedIndex}" Value="0">
            <Setter Property="ItemsSource" Value="{Binding AllLeaves}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

以下のコメントに基づいて更新

<Style x:Key="EmployeeTreeStyle" TargetType="{x:Type TreeView}">
    <Style.Triggers>
        <!-- Set ItemsSource based on which RadioButton is Selected -->
        <DataTrigger Binding="{Binding ElementName=RadioButton1, Path=IsChecked}" Value="True">
            <Setter Property="ItemsSource" Value="{Binding AllLeaves}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding ElementName=RadioButton2, Path=IsChecked}" Value="True">
            <Setter Property="ItemsSource" Value="{Binding ElementName=RadioButton2, Path=DataContext.Leaves}" />
        </DataTrigger>
    </Style.Triggers>
</Style>
于 2012-07-09T14:10:03.673 に答える
0

あなたが何を求めているのか完全にはわかりません... しかし、私はそれを前に与えます。

DataContext をこのようなものに設定した場合;

 public class PresentationModel : INotifyPropertyChanged
{
    private object _userPropertyA;
    public object UserPropertyA
    {
        get { return _userPropertyA; }
        set
        {
            _userPropertyA = value;

            //Set the data source based on the value of the selected?
            DataSource = new List<object>();
        }
    }

    private object _userPropertyB;
    public object UserPropertyB
    {
        get { return _userPropertyB; }
        set
        {
            _userPropertyB = value;

            //Set the data source based on the value of the selected?
            DataSource = new List<object>();
        }
    }

    public List<object> DataSource { get; set; }

    #region Implementation of INotifyPropertyChanged

    public void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion
}

次に、プロパティを必要なコントロールにバインドします

これにより、ユーザーから渡された値に基づいてデータソースを変更できます。

もちろん、INotifyPropertyChanged も実装する必要があります。

それは役に立ちますか?

乾杯。ステ。

于 2012-07-09T14:07:02.010 に答える