成功と失敗の両方を説明するために、次のバックエンドを使用します。いずれの場合も、私は物事の配列を持ち、array.First()に設定されているPropertyを持っています。だからここUWP Combobox SelectedItemはバインドされた値を無視します
public class MainPage
{
public MainPage()
{
this.InitializeComponent();
FirstString = Strings.First();
FirstItem = Items.First();
}
public string FirstString { get; set; }
public Item FirstItem { get; set; }
public string[] Strings => new[] {"1", "2", "3", "4"};
public Item[] Items => new[]
{
new Item {Index = 1},
new Item {Index = 2},
new Item {Index = 3},
new Item {Index = 4}
};
}
public class Item
{
public int Index { get; set; }
}
は
<ComboBox ItemsSource="{x:Bind Strings}"
SelectedItem="{x:Bind FirstString}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="system:String">
<TextBlock Text="{x:Bind}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
選択されるSelectedItem
の項目における結合の結果であり、ここで
<ComboBox ItemsSource="{x:Bind Items}"
SelectedItem="{x:Bind FirstItem}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="local:Item">
<TextBlock Text="{x:Bind Index}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
加えを選択することができない、代替アイテムの同じコードでありますMode=TwoWay
をオンにすると、最初のバインド中にVMの値がクリアされます。
私の質問は、なぜですか?これを引き起こす原因は何ですか?
あなたの出力ウィンドウが何を言うん:
それを解決するには、アイテムのゲッターが呼ばれるたびに同じインスタンスを返すキャッシュする必要がありますか? –
非常に興味深い質問がここにあります。私はインタビューでそれを使用します:) – AlexDrenea