簡體   English   中英

WPF ComboBox SelectedItem無法與ItemsSource一起使用

[英]WPF ComboBox SelectedItem not working with ItemsSource

編輯:請參閱以下我找到的解決方案。

我試圖在WPF / C#中創建一個組合框,該組合框從Fonts.SystemFontFamilies中提取所有可用的字體,然后根據設置選擇該項目。

我遇到的問題是ItemsSource可以工作,但是如果Mode = TwoWay,則將SelectedItem綁定到設置會清除設置,如果Mode = OneWay,則不會選擇項。

這是我的XAML:

<ComboBox Name="customFontFace" SelectionChanged="customFontFace_SelectionChanged" ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}" SelectedItem="{Binding Default.CustomFontFace, Source={StaticResource Settings}, Mode=TwoWay}" />

以及后面的一些代碼:

public Settings()
{
    InitializeComponent();
    customFontFace.SelectedItem = MyApplication.Properties.Settings.Default.CustomFontFace;
}
private void customFontFace_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // Doing nothing as of yet
}

在Settings.settings中,CustomFontFace的默認設置為Consolas。 如果添加一些日志記錄輸出,我會看到該設置顯示Consolas,但是根據設置的綁定模式,要么被組合框遮住,要么不更新組合框。

我已經嘗試了所有模式,並嘗試在幾個地方設置SelectedItem,但是我空了。 有什么想法嗎?

編輯:找到了我的答案。 通過將CustomFontFace的類型從字符串更改為System.Windows.Media.FontFamily,綁定將按預期工作。 由於存在FontFamily(字符串源)構造函數,因此“ Consolas”的默認值仍然有效。

我仍然無法在后台代碼中使其完美運行,但這是一個簡單得多的解決方案。 作為參考,如果我在后面的代碼中使用了它,則它可以工作,但前提是XAML具有SelectedItem的綁定:

customFontFace.SelectedValue = Fonts.SystemFontFamilies.FirstOrDefault(x => x == MyApplication.Properties.Settings.Default.CustomFontFace);

當CustomFontFace是一個字符串,並且XAML綁定和代碼隱藏都嘗試設置SelectedValue時,會發生某些情況,其中組合框值最終為空白。 我還沒有足夠的日志記錄來查看正在發生的事情。

您以什么形式存儲默認值? 如果將其存儲為字符串,則可能必須執行以下操作:

customFontFace.SelectedItem = Fonts.SystemFontFamilies.FirstOrDefault(MyApplication.Properties.Settings.Default.CustomFontFace);

因為WPF使用.Equals方法來確定選擇了哪個項目,並且如果您傳遞字符串,則可能不起作用。

如果您想使用xaml進行操作,則可以執行以下操作:

 <ComboBox 
            ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}"
            DisplayMemberPath="Source" 
            SelectedValuePath="Source" 
            SelectedValue="{Binding Source={x:Static myapplication:Settings.Default}, Path=CustomFontFace}"/>

我希望這有幫助 :)

暫無
暫無

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

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