簡體   English   中英

如何以編程方式將 System.Windows.Controls.Parameter 綁定到 Silverlight 中的 ComboBox 的 SelectedItem

[英]How to programmatically bind a System.Windows.Controls.Parameter to a ComboBox' SelectedItem in Silverlight

我有來自 MSDN 的以下示例:

<Grid x:Name="LayoutRoot" Background="White">
    <Grid.RowDefinitions>
        <RowDefinition Height="25" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <riaControls:DomainDataSource Name="source" QueryName="GetProductsByColor" AutoLoad="true">
        <riaControls:DomainDataSource.DomainContext>
            <domain:ProductDomainContext />
        </riaControls:DomainDataSource.DomainContext>
        <riaControls:DomainDataSource.QueryParameters>
            <riaControls:Parameter ParameterName="color" Value="{Binding ElementName=colorCombo, Path=SelectedItem.Content}" />
        </riaControls:DomainDataSource.QueryParameters>
    </riaControls:DomainDataSource>
    <ComboBox Width="60"  Grid.Row="0" x:Name="colorCombo">
        <ComboBoxItem Content="Black" />
        <ComboBoxItem Content="Blue" />
    </ComboBox>
    <data:DataGrid Grid.Row="1" ItemsSource="{Binding Data, ElementName=source}" />
</Grid>

好吧,如您所見,設置了創建參數綁定的行:

<riaControls:Parameter ParameterName="color" Value="{Binding ElementName=colorCombo, Path=SelectedItem.Content}" /> 

但是,如果我要用代碼嘗試這個,它不起作用:

Binding binding = new Binding();
binding.ElementName = "colorCombo";
//binding.Source = this.colorCombo; also doesn't work!
binding.Path = new PropertyPath("SelectedItem.Content");
binding.Mode = BindingMode.OneWay;

Parameter param = new Parameter();
param.Value = binding;

source.QueryParameters.Clear();
source.QueryParameters.Add(param);

關於我做錯了什么的任何想法?

要以編程方式綁定,您必須使用BindingOperations.SetBinding 目前,您只是將Value屬性設置為Binding實例,而不是綁定它。

BindingOperations.SetBinding(param, Parameter.ValueProperty, binding)

另外,將您的綁定改回Source = this.colorCombo 元素名稱通常在 XAML 上下文中解析,這在代碼隱藏中不存在。

暫無
暫無

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

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