0

通貨アイテムのリストにバインドされたリストボックスがあります。通貨はクラスです

public class Currency
{
    public string code { get; set; }
    public string countryName { get; set; }
    public string imgUrl { get; set; }
    public string infoLink { get; set;}  }
}

リスト ボックスは通貨オブジェクトのリストにバインドされ、このリスト ボックスの各項目は画像とテキスト ブロックのスタック パネルです。

SelectedItem プロパティをコード ビハインドのプロパティにバインドして追いつきたい

<ListBox Name="sCurrencyLB" Margin="10,0,0,0" Width="Auto" Height="180" 
    IsEnabled="{Binding IsChecked, ElementName=LiveTilesToggleBtn}" 
    SelectedItem="{Binding STileCurrency, Mode=TwoWay, 
            Source={StaticResource livetilemanager}}"  
    ItemsSource="{Binding SCurrencyList}" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Margin="0,10,0,0">
                <TextBlock Name="scountryNametb" Width="50" Text="{Binding code}" 
                    VerticalAlignment="Center" HorizontalAlignment="Right"/>
                <Image Source="{Binding imgUrl}" Height="50" Width="50" 
                    HorizontalAlignment="Left" />
             </StackPanel>
         </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

リストボックスで選択されたアイテムである必要があるプロパティのコード

private Currency sTileCurrency;

public Currency STileCurrency
{
    get
    {
        return appSettings.GetValueorDefault<Currency>("STileCurrency", null);
    }
    set
    {
        if (appSettings.AddOrUpdateValue("STileCurrency", value))
        {
            settings.Save();
        }

    }
}

注: XAML 内のプロパティを含む Class のインスタンスを作成しました

4

2 に答える 2

0

必要なものであるMVVMパターン(かなり)に従ってください

これを試して:

InitializeComponent () の前に; ウィンドウの請負業者にこれを追加します。

this.DataContext = this;

したがって、このようにSelectedItemをバインドします

SelectedItem="{Binding STileCurrency,Mode=TwoWay}
于 2013-08-15T18:30:18.767 に答える
0

livetilemanager がここにある場合、あなたが持っているものはうまくいくはずです:

Source={StaticResource livetilemanager}} 

その上にプロパティがあります:

SCurrencyList

そうですか?SCurrencyList がコード ビハインドのプロパティである場合 (コード ビハインドは既定の DataContext であるため)、SelectedItem バインディングの Source を指定する必要はありません。

ちなみに、バインディング エラーを確認するには、デバッグ中に VS のデバッグ ウィンドウに注目してください。

ちなみに、C# では、最初の文字を大文字にしてプロパティに名前を付けるのが一般的です。

public string Code {get;set;}
于 2013-11-05T03:22:31.910 に答える